Need help with SwiftPhotoGallery?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

justinvallely
212 Stars 46 Forks Apache License 2.0 194 Commits 9 Opened issues

Description

iOS photo gallery written in Swift

Services available

!
?

Need anything else?

Contributors list

SwiftPhotoGallery

Platform Version License CocoaPods tests Swift Dependencies

Overview

A full screen photo gallery for iOS and tvOS written in Swift.

  • Photos can be panned and zoomed (iOS only)
  • Pinch to zoom (iOS only)
  • Double tap to zoom all the way in and again to zoom all the way out (iOS only)
  • Single tap to close
  • Twitter style swipe to close (iOS only)
  • Includes a customizable page indicator
  • Support for any orientation (iOS only)
  • Supports images of varying sizes
  • Includes unit tests
  • Customize nearly all UI aspects
  • Integrates seamlessly with SDWebImage

Usage

To run the example project, clone the repo, and run

pod install
from the Example directory.

Requirements

  • iOS 9.0+
  • tvOS 10.0+
  • Xcode 10.2.1+
  • Swift 5.0+

Communication

  • If you need help, use Stack Overflow. (Tag 'swiftphotogallery')
  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

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

pod 'SwiftPhotoGallery'

Implementation

  • Import the framework in your view controller

    swift
    import SwiftPhotoGallery
    
  • Create an instance

    swift
    let gallery = SwiftPhotoGallery(delegate: self, dataSource: self)
    
  • Customize the look

    swift
    gallery.backgroundColor = UIColor.black
    gallery.pageIndicatorTintColor = UIColor.gray.withAlphaComponent(0.5)
    gallery.currentPageIndicatorTintColor = UIColor.white
    gallery.hidePageControl = false
    
  • Implement the datasource ```swift let imageNames = ["image1.jpeg", "image2.jpeg", "image3.jpeg"]

func numberOfImagesInGallery(gallery: SwiftPhotoGallery) -> Int { return imageNames.count }

func imageInGallery(gallery: SwiftPhotoGallery, forIndex: Int) -> UIImage? { return UIImage(named: imageNames[forIndex]) } ```

  • Implement the delegate

    swift
    func galleryDidTapToClose(gallery: SwiftPhotoGallery) {
    // do something cool like:
    dismiss(animated: true, completion: nil)
    }
    
  • Present the gallery

    swift
    present(gallery, animated: true, completion: nil)
    

Full Example

class ViewController: UIViewController, SwiftPhotoGalleryDataSource, SwiftPhotoGalleryDelegate {

let imageNames = ["image1.jpeg", "image2.jpeg", "image3.jpeg"]
var index: Int = 2

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func didPressShowMeButton(sender: AnyObject) {
    let gallery = SwiftPhotoGallery(delegate: self, dataSource: self)

    gallery.backgroundColor = UIColor.black
    gallery.pageIndicatorTintColor = UIColor.gray.withAlphaComponent(0.5)
    gallery.currentPageIndicatorTintColor = UIColor.white
    gallery.hidePageControl = false

    present(gallery, animated: true, completion: nil)

    /*
    /// Or load on a specific page like this:

    present(gallery, animated: true, completion: { () -> Void in
        gallery.currentPage = self.index
    })
    */

}

// MARK: SwiftPhotoGalleryDataSource Methods

func numberOfImagesInGallery(gallery: SwiftPhotoGallery) -> Int {
    return imageNames.count
}

func imageInGallery(gallery: SwiftPhotoGallery, forIndex: Int) -> UIImage? {
    return UIImage(named: imageNames[forIndex])
}

// MARK: SwiftPhotoGalleryDelegate Methods

func galleryDidTapToClose(gallery: SwiftPhotoGallery) {
    dismiss(animated: true, completion: nil)
}

}

Author

Justin Vallely, [email protected]

License

SwiftPhotoGallery is available under the Apache License 2.0. See the LICENSE file for more info.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.