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.
Version 0.5 currently supports Swift 2.2. Code compatible with newer versions can be found in branches swift-2.3 and swift-3. Currently only ImageSlideshow itself and AFNetworking extension is supported, support for Alamofire and SDWebImage will be added shortly. Eventually, the swift-3 branch will be merged into master and released as an update.
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 three more InputSources available:
pod "ImageSlideshow/Alamofire"
Used by creating a new AlamofireSource
instance:
AlamofireSource(urlString: "https://images.unsplash.com/photo-1432679963831-2dab49187847?w=1080")
pod "ImageSlideshow/AFURL"
Used by creating a new AFURLSource
instance:
AFURLSource(urlString: "https://images.unsplash.com/photo-1432679963831-2dab49187847?w=1080")
pod "ImageSlideshow/SDWebImage"
Used by creating a new SDWebImageSource
instance:
SDWebImageSource(urlString: "httpshttps://images.unsplash.com/photo-1432679963831-2dab49187847?w=1080")
Behaviour is configurable by those 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
There is also a possibility to open full-screen image view using attached FullScreenSlideshowViewController
. The controller is meant to be presented manually, as seen on the example:
var slideshowTransitioningDelegate: 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.slideshowTransitioningDelegate = ZoomAnimatedTransitioningDelegate(slideshowView: slideshow, slideshowController: ctr)
ctr.transitioningDelegate = self.slideshowTransitioningDelegate
self.presentViewController(ctr, animated: true, completion: nil)
}
Petr Zvoníček
ImageSlideshow is available under the MIT license. See the LICENSE file for more info.
Inspired by projects: