Lightbox is a convenient and easy to use image viewer for your iOS app, packed with all the features you expect:
- Paginated image slideshow.
- Video support.
- Double-tap to zoom.
- Image caption.
- Dynamic background based on Hue
- Remote image loading and caching based on Imaginary
- Interactive transition animations.
- Powerful configuration.
- Live Demo
To start your slideshow just instantiate LightboxController
, set needed
delegates and present it:
// Create an array of images.
let images = [
LightboxImage(imageURL: URL(string: "https://cdn.arstechnica.net/2011/10/05/iphone4s_sample_apple-4e8c706-intro.jpg")!),
LightboxImage(
image: UIImage(named: "photo1")!,
text: "This is an example of a remote image loaded from URL"
),
LightboxImage(
image: UIImage(named: "photo2")!,
text: "",
videoURL: URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
),
LightboxImage(
image: UIImage(named: "photo3")!,
text: "This is an example of a local image."
)
]
// Create an instance of LightboxController.
let controller = LightboxController(images: images)
// Set delegates.
controller.pageDelegate = self
controller.dismissalDelegate = self
// Use dynamic background.
controller.dynamicBackground = true
// Present your controller.
present(controller, animated: true, completion: nil)
Use LightboxControllerPageDelegate
if you want to be notified about page
navigation changes.
extension ViewController: LightboxControllerPageDelegate {
func lightboxController(_ controller: LightboxController, didMoveToPage page: Int) {
print(page)
}
}
Use LightboxControllerDismissalDelegate
to be notified when controller is
about to be dismissed. Please note that LightboxController
dismisses itself
if it was presented initially.
extension ViewController: LightboxControllerDismissalDelegate: class {
func lightboxControllerWillDismiss(_ controller: LightboxController) {
// ...
}
}
By default images are loaded using Imaginary for reliable loading and caching. But it's easy to change this behavior using LightboxConfig
LightboxConfig.loadImage = {
imageView, URL, completion in
// Custom image loading
}
Lightbox can show and plays video using default AVPlayerViewController
. Showning video by using videoURL
:
LightboxImage(
image: UIImage(named: "photo2")!,
text: "",
videoURL: NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
)
Override video handling if needed:
LightboxConfig.handleVideo = { from, videoURL in
// Custom video handling
let videoController = AVPlayerViewController()
videoController.player = AVPlayer(url: videoURL)
from.present(videoController, animated: true) {
videoController.player?.play()
}
}
Configure text, colors, fonts of UI elements by overriding the static variables in the Lightbox configuration struct. As an example:
LightboxConfig.CloseButton.image = UIImage(named: ImageList.Lightbox.closeButton)
LightboxConfig.CloseButton.textAttributes = TextAttributes.Lightbox.closeButton
LightboxConfig.CloseButton.text = "Finish"
LightboxConfig.DeleteButton.image = UIImage(named: ImageList.Lightbox.deleteButton)
LightboxConfig.DeleteButton.textAttributes = TextAttributes.Lightbox.deleteButton
LightboxConfig.DeleteButton.text = "Delete"
LightboxConfig.InfoLabel.ellipsisText = "Show more"
Lightbox is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Lightbox'
In order to quickly try the demo project of a Lightbox just run
pod try Lightbox
in your terminal.
Lightbox is also available through Carthage. To install just write into your Cartfile:
github "hyperoslo/Lightbox"
To install Lightbox manually just download and drop Sources
and
Images
folders in your project.
Hyper Interaktiv AS, ios@hyper.no
We would love you to contribute to Lightbox, check the CONTRIBUTING file for more info.
Lightbox is available under the MIT license. See the LICENSE file for more info.