TestsTested | ✓ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Jan 2017 |
SwiftSwift Version | 3.0 |
SPMSupports SPM | ✗ |
Maintained by Michael Skiba, Raiz Labs, Alex Rouse, Rightpoint CI.
An image gallery for iOS
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.
.swift
files in RIGImageGallery/
and drop them into your project.To see a complete example of using the gallery, take a look at the sample project.
func createPhotoGallery() -> RIGImageGalleryViewController {
let urls: [URL] = [
"https://placehold.it/1920x1080",
"https://placehold.it/1080x1920",
"https://placehold.it/350x150",
"https://placehold.it/150x350",
].flatMap(URL.init(string:))
let rigItems: [RIGImageGalleryItem] = urls.map { _ 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
}
}
request.resume()
}
return rigController
}
@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, [email protected] @atelierclkwrk