iOS / Swift image slideshow with circular scrolling, timer and full screen viewer.
This component is under development. Description and brief documentation will follow with future versions. The API will be subject of change.
Roadmap for 1.0:
Create test projectCreate CocoaPodFix initial bugs- Polish API
- Write brief documentation
- Improve the example project to demonstrate all the features
InputSource subclass for Alamofire (yay!)
To run the example project, clone the repo, and run pod install
from the Example directory first.
ImageSlideshow is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'ImageSlideshow', '~> 0.5'
You can instantiate Slideshow either in Storyboard / Interface Builder, or in code.
Images can be set by calling setImageInputs
method on ImageSlideshow
instance. Argument is an array of InputSources. By default you may use ImageSource
which takes UIImage
, but you can easily subclass InputSource
and support your own input source.
slideshow.setImageInputs([ImageSource(image: UIImage(named: "myImage"))!, ImageSource(image: UIImage(named: "myImage2"))!,])
There are two more InputSources available:
AlamofireSource subspec for loading image from an URL via AlamofireImage. To use this add the Alamofire subspec to your Podfile.
pod "ImageSlideshow/Alamofire"
An image from arbitrary URL is then loaded by AlamofireSource initialization.
AlamofireSource(urlString: "https://upload.wikimedia.org/wikipedia/commons/d/d5/Trencin_hdr_001.jpg")
AFURL subspec for loading image from an URL via AFNetworking. To use this add the AFURL subspec to your Podfile.
pod "ImageSlideshow/AFURL"
An image from arbitrary URL is then loaded by AFURLSource initialization.
AFURLSource(urlString: "https://upload.wikimedia.org/wikipedia/commons/d/d5/Trencin_hdr_001.jpg")
It is possible to configure behaviour by setting numerous properties:
slideshowInterval
- in case you want automatic slideshow, set up the interval between sliding to next picturezoomEnabled
- enables zoomingcircular
- enables circular scrollingpageControlPosition
- configures position of UIPageControll (hidden, inside scroll view or under scroll view)contentScaleMode
- configures the scaling (UIViewContentMode.ScaleAspectFit by default)draggingEnabled
- enables dragging
As seen on sample image and example project, you may also use full-scren view. The controller can be presented manually as seen on the example.
var transitionDelegate: ZoomAnimatedTransitioningDelegate?
override func viewDidLoad() {
...
let gestureRecognizer = UITapGestureRecognizer(target: self, action: "openFullScreen")
slideshow.addGestureRecognizer(gestureRecognizer)
}
func click() {
let ctr = FullScreenSlideshowViewController()
// called when full-screen VC dismissed and used to set the page to our original slideshow
ctr.pageSelected = {(page: Int) in
self.slideshow.setScrollViewPage(page, animated: false)
}
// set the initial page
ctr.initialImageIndex = slideshow.scrollViewPage
// set the inputs
ctr.inputs = slideshow.images
self.transitionDelegate = ZoomAnimatedTransitioningDelegate(slideshowView: slideshow, slideshowController: ctr)
ctr.transitioningDelegate = self.transitionDelegate
self.presentViewController(ctr, animated: true, completion: nil)
}
Petr Zvoníček, zvonicek@gmail.com
ImageSlideshow is available under the MIT license. See the LICENSE file for more info.
Inspired by projects: