Latest 0.3.1
License MIT
Platforms ios 9.0
Frameworks Foundation, UIKit

An image gallery for iOS

Build Status
Carthage compatible

RIGImageGallery is a photo gallery meant to provide most of the functionality of the image gallery in the system Photos app, and handle asynchronous loading of images.

This library is part of the Raizlabs Interface Guidelines, which are UI components that offer sensible defaults to help a project get off the ground quickly with components that feel native to the platform, and with easy to use customization options.



  • [x] Swipe to advance
  • [x] Pinch to zoom
  • [x] Double tap to toggle 1:1 zoom
  • [x] Single tap to hide the nav bar


  • iOS 9.0+
  • Xcode 8.0+

Installation with CocoaPods


RIGImageGallery is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'RIGImageGallery'


Create a Cartfile that lists the framework and run carthage update. Follow the instructions to add $(SRCROOT)/Carthage/Build/iOS/RIGImageGallery.framework to an iOS project.

github "Raizlabs/RIGImageGallery"


  1. Download all of the .swift files in RIGImageGallery/ and drop them into your project.
  2. Congratulations!

Usage example

To see a complete example of using the gallery, take a look at the sample project.

Creating a Gallery from Image URLs

func createPhotoGallery() -> RIGImageGalleryViewController {

    let urls: [URL] = [

    let rigItems: [RIGImageGalleryItem] = { _ in
        RIGImageGalleryItem(placeholderImage: UIImage(named: "placeholder") ?? UIImage(),
                            isLoading: true)

    let rigController = RIGImageGalleryViewController(images: rigItems)

    for (index, URL) in urls.enumerated() {
        let request = imageSession.dataTask(with: URLRequest(url: URL)) { [weak rigController] data, _, error in
            if let image = data.flatMap(UIImage.init), error == nil {
                rigController?.images[index].image = image
                rigController?.images[index].isLoading = false

    return rigController

Presenting and Customizing the View Controller

@objc func showGallery(_ sender: UIButton) {
    let photoViewController = createPhotoGallery()
    photoViewController.dismissHandler = dismissPhotoViewer
    photoViewController.actionButtonHandler = actionButtonHandler
    photoViewController.actionButton = UIBarButtonItem(barButtonSystemItem: .action, target: nil, action: nil)
    photoViewController.traitCollectionChangeHandler = traitCollectionChangeHandler
    photoViewController.countUpdateHandler = updateCount
    let navigationController = UINavigationController(rootViewController: photoViewController)
    present(navigationController, animated: true, completion: nil)

func dismissPhotoViewer(_ :RIGImageGalleryViewController) {
    dismiss(animated: true, completion: nil)

func actionButtonHandler(_: RIGImageGalleryViewController, galleryItem: RIGImageGalleryItem) {

func updateCount(_ gallery: RIGImageGalleryViewController, position: Int, total: Int) {
    gallery.countLabel.text = "(position + 1) of (total)"

func traitCollectionChangeHandler(_ photoView: RIGImageGalleryViewController) {
    let isPhone = UITraitCollection(userInterfaceIdiom: .phone)
    let isCompact = UITraitCollection(verticalSizeClass: .compact)
    let allTraits = UITraitCollection(traitsFrom: [isPhone, isCompact])
    photoView.doneButton = photoView.traitCollection.containsTraits(in: allTraits) ? nil : UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: nil)


Issues and pull requests are welcome! Please ensure that you have the latest SwiftLint installed before committing and that there are no style warnings generated when building.

Contributors are expected to abide by the Contributor Covenant Code of Conduct.


RIGImageGallery is available under the MIT license. See the LICENSE file for more info.


Michael Skiba, mailto:[email protected] @atelierclkwrk

Latest podspec

    "name": "RIGImageGallery",
    "version": "0.3.1",
    "summary": "An image gallery view controller designed to work with the Raizlabs Interface Guidelines for iOS.",
    "description": "RIGImageGallery is an image gallery for iOS written in Swift.nnThe goal is to offer sensible defaults that takes care of most of building an image gallery automatically, and offer easy block based customization.",
    "homepage": "",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    "authors": {
        "Michael Skiba": "[email protected]"
    "source": {
        "git": "",
        "tag": "0.3.1"
    "social_media_url": "",
    "platforms": {
        "ios": "9.0"
    "source_files": [
    "frameworks": [
    "pushed_with_swift_version": "3.0"

Pin It on Pinterest

Share This