项目地址:TFImageBrowser
一个方便的图片浏览器,提供图片资源,可横向查看、切换图片。
使用
使用pod search "TFImageBrowser" --simple
查找最新版,使用cocoapods集成。
github上的这个项目是使用实例+图片浏览器代码。
注意:让图片浏览器和SDWebImage
共享缓存,打开EnableSDWebImageResolver
宏。
#define EnableSDWebImageResolver 1 //启用SDWebImage解析图片
复制代码
YYWebImage类似,开关宏为EnableYYWebImageResolver
。
1. 支持多种图片资源
- 图片资源可以是字符串,如网络连接地址、本地文件或MainBundle内的图片名
- 可以是系统的资源类型,如
PHAssert
和ALAssert
- 也可以是
UIImage
类型
各种图片资源类型可以混合在同一组里,也就是同一次浏览的图片里可以同时包含网络图片、相册图片等。
2. 可以和其他的图片缓存库共享
如果你有一张图片,是用SDWebImage
下载并管理缓存的,把这个图片的URL传给图片浏览器后,只需指定SDWebImage
相关的解析器,就可以使用共享的缓存,而不会重新在下载一遍。
默认还有YYWebImage
的解析器,可以让图片资源和YYWebImage
共享。
3. 可显示iCloud原图
开启相册空间优化后,相册的图片会把原图保存在iCloud上,本地只是模糊的缩略图。
使用TFImageBrowser查看相册图片资源时,如果图片在iCloud上,会跟处理其他网络资源一样下载下来显示大图。
4. 支持双击放大查看等交互
- 双击放大图片查看,并且根据点击位置,放大点击的区域。
- 单击图片关闭图片浏览器
- 长按图片回调事件
- 支持横竖屏旋转
5. 自带过场动画
[self showImageBrowser:_browserVC
fromRect:CGRectMake(40, 400, 30, 200)
transitionDuration:0.25f
showType:(TFImageBrowerShowTypePresentDismiss)];
复制代码
使用上面方法来显示图片浏览器,会使用特定过场动画:右一块小区域逐渐放大到全屏,就像系统相册点击查看大图时那样。
6.可以配置的进度条
对于网络加载的图片资源,会不断反馈下载进度,如果配置了进度条,则会显示进度。
UIProgressView *progressBar = [[UIProgressView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/2.0 - 50, [UIScreen mainScreen].bounds.size.height/2.0, 100, 20)];
_browserVC.progressView = progressBar;
复制代码
进度条只需要是UIView
类型,并且实现了setProgress:
方法即可。所以可以自定义任意的进度条提供给图片浏览器。
这个库还提供了一种圆形的进度条实现,可以自定义大小、颜色、环形宽度等。如:
关于项目框架
主体是图片浏览器TFImageBrowserViewController
和显示每个图片的TFImageBrowserImageView
。
因为图片资源可以有多种不同的描述方式,所以定义了协议TFImageBrowserImageUri
,每种实现这个协议的类都可描述一种图片资源类型,已有的类型是上面提到的3种。
提供给imageBrowser的数据是NSArray<id<TFImageBrowserImageUri>> *allImages
,即都是抽象类型,然后每种图片资源该怎么得到图片数据,就靠解析器。解析器是实现协议TFImageUriDataResolver
的类型,它的作用是接收一个imageUri
,然后解析器负责把这个资源解析成UIImage,在回调给界面显示。
然后从图片数据到显示的逻辑都TFImageBrowserImageDisplayTool
来负责,比如该请求缩略图还是大图、是否显示进度条等。