🖼 ImageSlideshow
可定制的 Swift 图像幻灯片,具有循环滚动、计时器和全屏查看器
📱 示例
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。
🔧 安装
CocoaPods
ImageSlideshow 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行即可
pod 'ImageSlideshow', '~> 1.9.0'
Carthage
要使用 Carthage 将 ImageSlideshow 集成到您的 Xcode 项目中,请在 Cartfile 中指定它
github "zvonicek/ImageSlideshow" ~> 1.9.0
Carthage 不包含外部提供程序的 InputSources(因为这些提供程序的依赖关系)因此您需要从 ImageSlideshow/Classes/InputSources
手动获取您需要的。
手动
一种可能性是从发布页面下载构建好的框架(ImageSlideshow.framework.zip),并在您的目标项目(在Linked Frameworks and Libraries
中)中链接它。然而,由于Swift开发速度很快,这目前存在一些问题——框架是为单一Swift版本构建的,可能不支持之前的/未来的版本。
Alternatively,也可以将整个ImageSlideshow
目录整个复制到您的项目中。请确保删除您不需要的外部输入源。
关于Swift 2.3、Swift 3和Swift 4的支持说明
1.4版本支持Swift 4。Swift 3从版本1.0开始支持,对于Swift 2.2和Swift 2.3兼容的代码,请使用版本0.6或分支swift-2.3。
🔨 如何使用
将ImageSlideshow视图添加到视图层次结构中,您可以在Interface Builder中或通过代码实现。
图片加载
使用ImageSlideshow
实例上的setImageInputs
方法设置图片,该方法接收一个InputSource数组。默认情况下,您可以使用ImageSource
,它接受UIImage
或其它几种流行的网络库InputSource。您也可以通过实现InputSource
协议来创建自己的输入源。
库 | InputSource名称 | 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/Parse" |
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))
])
配置
通过以下属性可以配置行为
slideshowInterval
- 以秒为单位的幻灯片间隔时间(默认0
– 禁用)zoomEnabled
- 启用缩放(默认false
)circular
- 启用循环滚动(默认true
)activityIndicator
- 允许设置自定义活动指示器,请参阅“活动指示器”部分pageIndicator
- 允许设置自定义页面指示器,请参阅“页面指示器”部分;将nil
赋值以隐藏页面指示器pageIndicatorPosition
- 配置页面指示器的位置contentScaleMode
- 配置缩放(默认ScaleAspectFit
)draggingEnabled
- 启用拖拽(默认true
)currentPageChanged
- 在页面更改时调用的闭包willBeginDragging
- 在scrollViewWillBeginDragging
时调用的闭包didEndDecelerating
- 在scrollViewDidEndDecelerating
时调用的闭包preload
- 图像预加载配置(默认all
预加载,也可用fixed
)
页面指示器
可以通过在 ImageSlideshow 上使用 pageIndicator
属性来自定义页面指示器。默认情况下,使用的是一个简单的 UIPageControl。如果需要,也可以自定义页面控制。
let pageIndicator = UIPageControl()
pageIndicator.currentPageIndicatorTintColor = UIColor.lightGray
pageIndicator.pageIndicatorTintColor = UIColor.black
slideshow.pageIndicator = pageIndicator
同时,提供了一个简单的标签页面指示器,以 "5/21"(第二十一页的第五页)的形式显示页码。
slideshow.pageIndicator = LabelPageIndicator()
您还可以通过采用 PageIndicatorView
协议来实现自己的页面指示器。
可以通过将 PageIndicatorPosition
值分配给 ImageSlideshow 上的 pageIndicatorPosition
属性来配置页面指示器的位置。您可以分别指定水平和垂直定位。
水平 定位选项有:.left(padding: Int)
、.center
、.right(padding: Int)
垂直 定位选项有:.top
、.bottom
、.under
、customTop(padding: Int)
、customBottom(padding: Int)
、customUnder(padding: Int)
示例
slideshow.pageIndicatorPosition = PageIndicatorPosition(horizontal: .left(padding: 20), vertical: .bottom)
活动指示器
默认情况下,活动指示器不被显示,但您可以通过将 DefaultActivityIndicator
实例设置到 Image Slideshow 中来启用它
slideshow.activityIndicator = DefaultActivityIndicator()
您还可以自定义指示器样式和颜色
slideshow.activityIndicator = DefaultActivityIndicator(style: .white, color: nil)
此外,还有一个使用您自己的活动指示器的选项。您只需实现 ActivityIndicatorView
和 ActivityIndicatorFactory
协议即可。有关更多信息,请参阅 ActivityIndicatorView.swift
全屏视图
您还可以使用附带的 FullScreenSlideshowViewController
来打开全屏图像视图。最简单的方法是调用
override func viewDidLoad() {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.didTap))
slideshow.addGestureRecognizer(gestureRecognizer)
}
func didTap() {
slideshow.presentFullScreenController(from: self)
}
如果需要更高级的行为,您可以手动实例化和配置 FullScreenSlideshowViewController
👤 作者
Petr Zvoníček
📄 许可
ImageSlideshow 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。
👀 参考
受以下项目启发