Swift image slideshow with circular scrolling, timer and full screen viewer
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', '~> 1.1.0'
To integrate ImageSlideshow into your Xcode project using Carthage, specify it in your Cartfile:
github "zvonicek/ImageSlideshow" "1.1.0"
Carthage does not include InputSources for external providers (due to dependency on those providers) so you need to grab the one you need from ImageSlideshow/Classes/InputSources
manually.
One possibility is to download a builded framework (ImageSlideshow.framework.zip) from releases page and link it with your project (underLinked Frameworks and Libraries
in your target). This is, however, currently problematic because of rapid Swift development -- the framework is builded for a single Swift version and may not work on previous/future versions.
Alternatively can also grab the whole ImageSlideshow
directory and copy it to your project. Be sure to remove those external Input Sources you don't need.
Note on Swift 2.3 and Swift 3 support
Version 1.0 supports Swift 3. For Swift 2.2 and Swift 2.3 compatible code use version 0.6 or branch swift-2.3.
Add ImageSlideshow view to your view hiearchy either in Interface Builder or in code.
Set images by using setImageInputs
method on ImageSlideshow
instance with an array of InputSources. By default you can use ImageSource
which takes UIImage
or few other InputSources for most popular networking libraries. You can also create your own input source by implementing InputSource
protocol.
Library | InputSource name | Pod |
---|---|---|
AlamofireImage | AlamofireSource | pod "ImageSlideshow/Alamofire" |
AFNetworking | AFURLSource | pod "ImageSlideshow/AFURL" |
SDWebImage | SDWebImageSource | pod "ImageSlideshow/SDWebImage" |
Kingfisher | KingfisherSource | pod "ImageSlideshow/Kingfisher" |
Parse | ParseSource | pod "ImageSlideshow/ParseSource" |
slideshow.setImageInputs([
ImageSource(image: UIImage(named: "myImage"))!,
ImageSource(image: UIImage(named: "myImage2"))!,
AlamofireSource(urlString: "https://images.unsplash.com/photo-1432679963831-2dab49187847?w=1080"),
KingfisherSource(urlString: "https://images.unsplash.com/photo-1432679963831-2dab49187847?w=1080"),
ParseSource(file: PFFile(name:"image.jpg", data:data))
])
Behaviour is configurable by those properties:
slideshowInterval
- in case you want automatic slideshow, set up the interval between sliding to next picture (default0
– disabled)zoomEnabled
- enables zooming (defaultfalse
)circular
- enables circular scrolling (defaulttrue
)pageControlPosition
- configures position of UIPageControl (defaultinsideScrollView
, alsohidden
,underScrollView
orcustom
)contentScaleMode
- configures the scaling (defaultScaleAspectFit
)draggingEnabled
- enables dragging (defaulttrue
)currentPageChanged
- closure called on page changewillBeginDragging
- closure called on scrollViewWillBeginDraggingdidEndDecelerating
- closure called on scrollViewDidEndDeceleratingpreload
- image preloading configuration (defaultall
preloading, alsofixed
)
There is also a possibility to open full-screen image view using attached FullScreenSlideshowViewController
. The simplest way is to call:
override func viewDidLoad() {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.didTap))
slideshow.addGestureRecognizer(gestureRecognizer)
}
func didTap() {
slideshow.presentFullScreenController(from: self)
}
FullScreenSlideshowViewController
can also be instantiated and configured manually if more advanced behavior is needed.
Petr Zvoníček
ImageSlideshow is available under the MIT license. See the LICENSE file for more info.
Inspired by projects: