TZImagePickerController
是 UIImagePickerController 的一个克隆版本,支持多选照片、原始照片和视频,也允许预览照片和视频,支持 iOS6+。
这是一个支持多选、挑选原图和视频的图片选择器,同时具有预览功能,支持 iOS6+。
重要提示1:在提交 issue 前,请先参照 Demo 常见问题自查!如果 Demo 正常运行,您可以尝试更新到最新版本。
重要提示2:3.0.7 版本适配了 iPhoneXR、XS、XS Max,建议大家尽快更新
关于升级iOS10和Xcdoe8的提示:
在 Xcode8 环境下,在 iOS10 的设备/模拟器上运行项目需要额外配置 info.plist 文件。分别是 Privacy - Photo Library Usage Description 和 Privacy - Camera Usage Description 字段,具体设置详见 Demo 中的 info.plist。
项目截图 1.Demo首页 2.照片列表页 3.照片预览页 4.视频预览页
一. 安装
CocoaPods
pod 'TZImagePickerController' #iOS8和以后
pod 'TZImagePickerController', '2.2.6' #iOS6、iOS7
Carthage
github "banchichen/TZImagePickerController"
手动安装
将TZImagePickerController文件夹拽入项目中,导入头文件:#import "TZImagePickerController.h"
二. Example 例子
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:9 delegate:self];
// You can get the photos by block, the same as by delegate.
// 你可以通过block或者代理,来得到用户选择的照片.
[imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
}];
[self presentViewController:imagePickerVc animated:YES completion:nil];
三. Requirements 要求
iOS 6或更高版本。需要ARC
iOS6及以上系统可使用. ARC环境.
当系统版本为iOS6或iOS7时,使用AssetsLibrary。
当系统版本为iOS8及以上时,使用PhotoKit。
如果运行在iOS6或7系统上,用的是AssetsLibrary库获取照片资源。
如果运行在iOS8及以上系统上,用的是PhotoKit库获取照片资源。
TZImagePickerController使用了相机、定位、麦克风、相册,你需要在info.plist文件中添加以下属性,如示例所示:
TZImagePickerController使用了相机、定位、麦克风、相册,请参考Demo将其添加到info.plist文件中:
Privacy - Camera Usage Description
Privacy - Location When In Use Usage Description
Privacy - Microphone Usage Description
Privacy - Photo Library Usage Description
四. More 更多
如果你发现了一个错误,请创建一个issue。
欢迎提交pull request。
更多信息请查看代码。
如果您发现了bug,请提交一个issue。欢迎您提交pull requests。
更多信息详见代码,也可浏览我的博客: 我的博客
关于issue:
请尽可能详细地描述系统版本、手机型号、库的版本、崩溃日志和复现步骤,请先更新到最新版再测试一下,如果新版还存在问题再提交~如果已有开启的类似issue,请直接在该issue下评论说明您的疑问
五. FAQ 常见问题
Q:pod search TZImagePickerController 搜索到的版本不是最新版
A:需要在终端执行cd变换文件路径命令退回到Desktop,然后执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索
Q:拍照后照片保存失败
A:请参考issue481:https://github.com/banchichen/TZImagePickerController/issues/481 的信息排查,若还有问题请直接在issue内评论
Q:photos数组中的图片不是原图,如何获取原图?
A:请参考issue457的解释:https://github.com/banchichen/TZImagePickerController/issues/457
Q:系统语言是中文/英文,界面上却有部分相册名称、返回按钮显示成了英文/中文?
A:请参考 https://github.com/banchichen/TZImagePickerController/issues/443 和 https://github.com/banchichen/TZImagePickerController/issues/929
Q:预览界面能否支持传递NSURL、UIImage对象?
A:3.0.1版本已支持,需要新增一个库:TZImagePreviewController,请参考其中的Demo使用。
Q:能否设置可选视频的最大/最小时长?照片的最小/最大尺寸?不符合要求的不显示?
A:可以的,参照Demo的isAssetCanSelect方法实现。我会返回asset出来,是否显示由您决定,注意这是一个同步方法,对于需要根据asset进行异步获取信息(如视频的大小、视频是否存在iCloud中)的,无法做到。如果真要这样做,相册打开速度会变慢,您需要修改源码。
Q:预览页面出现了导航栏?
A:https://github.com/banchichen/TZImagePickerController/issues/652
Q:能否增加微信编辑图片的功能?
A:考虑一下,优先级较低
Q:是否有QQ/微信群?
A:有QQ群:778723997
Q:想提交一个PR?
A:请先加入QQ群与我确认,避免同时修改同一处内容。每个PR请只修复1个问题,变动内容越少越好。
Q:demo在真机上无法运行?
A:1、team选你自己的;2、bundleId也改成你自己的或选一个不会和别人重复的。可参考简书的这篇博客
Q:设置导航栏颜色无效?导航栏颜色总是白色?
A:是否有集成WRNavigationBar?如有,请参考其readme调整一下它的wr_setBlackList,将TZImagePickerController相关的控制器放到黑名单里,使得不受WRNavigationBar的影响。如果没有集成,可在issues列表中搜索类似的issue参考一下,如果还是找不到解决方案,可加群提供一个能复现该问题的demo,0~2天帮您解决。最近发现WRNavigationBar的黑名单会有不生效的情况,临时解决方案大家可参考:https://github.com/wangrui460/WRNavigationBar/issues/145
Q:导航栏不见了?
A:是否有集成GKNavigationBarViewController?需要升级到2.0.4及以上版本,详见issue:https://github.com/QuintGao/GKNavigationBarViewController/issues/7。
Q:有的视频导出失败了?
A:升级到2.2.6及以上版本试试,发现是修正视频转向导致的,2.2.6开始默认不再主动修正。如需打开,可设置needFixComposition为YES,但有几率导致安卓拍的视频导出失败。此外也可参考这个issue:https://github.com/banchichen/TZImagePickerController/issues/1073
Q:视频导出慢?
A:视频导出分两步,第一步是通过PHAsset获取AVURLAsset,如是iCloud视频则涉及到网络请求,耗时容易不可控,第二步是通过AVURLAsset将视频保存到沙盒,耗时不算多。但第一步耗时不可控,你可以拷贝我源码出来拿到第一步的进度给用户一个进度提示...
Q:有的图片info中没有PHImageFileURLKey?
A:不要去拿PHImageFileURLKey,没用的,只有通过Photos框架才能访问相册照片,一个路径是没有用的。
如果需要通过路径上传照片,请先把UIImage保存到沙盒,用沙盒路径。
如果您上传照片需要一个名称参数,请参考Demo直接使用照片名字。
六. Release Notes 最近更新
3.3.2 适配iOS13,修复若干问题
3.2.1 新增裁剪时使用scaleAspectFillCrop属性,设置为YES后,照片尺寸小于裁剪框时会自动放大以填充裁剪框
3.2.0 加入使用NSOperationQueue控制获取原图并发数以降低内存消耗的示例
3.1.8 在批量获取图片时添加队列控制,尝试优化大批量选择图片时CPU和内存占用过高的问题(仍然存在风险,谨慎设置maxImagesCount过大...)
3.1.5 相册内无照片时给出提示,修复快速滑动时内存不断增加的问题
3.1.3 适配阿拉伯语等语言从右向左布局的特性
3.0.8 新增gifImagePlayBlock允许使用FLAnimatedImage等替换内部的GIF播放方案
3.0.7 适配iPhoneXR、XS、XS Max,建议大家尽快更新
3.0.6 优化保存照片、视频的方法
3.0.1 新增对TZImagePreviewController库的支持,允许预览UIImage、NSURL、PHAsset对象
3.0.0 移除iOS6和7的适配代码,更轻量,最低支持iOS8
2.2.6 新增needFixComposition属性,默认为NO,不再默认自动修正视频转向,防止部分安卓拍摄的视频导出失败(最后一个支持iOS6和7的版本)
2.1.5 修复开启showSelectedIndex后照片列表页iCloud图片进度条混乱的bug
2.1.4 新增多个页面和组件的样式自定义block,允许自定义绝大多数UI样式
2.1.2 新增showPhotoCannotSelectLayer属性,当已选照片数量达到最大可选数量时,可像微信一样让其他照片显示一个提示不可选的浮层
2.1.1 新增是否显示图片选中序号的属性,优化一些细节
2.1.0.3 新增拍摄视频功能,优化一些细节
2.0.0.6 优化自定义语言包(languageBundle)的支持,加入使用示例
2.0.0.5 优化性能,提高选择器打开速度,新增越南语支持
2.0.0.2 新增繁体中文支持,可设置首选语言,国际化支持更强大;优化一些细节
1.9.8 支持 Carthage,优化一些细节
1.9.6 优化视频预览和 GIF 预览页面的工具栏在 iPhoneX 上的样式
...
1.8.4 加入横竖屏适配;支持视频/GIF 多选;支持视频和照片一起选择
1.8.1 新增 2 个代理方法,支持由上层决定相册/照片的显示与否
...
1.7.7 支持 GIF 图片的播放和选择
1.7.6 支持显示共享相册和同步相册
1.7.5 允许不进入预览页面直接选择照片
1.7.4 支持单选模式下裁剪照片,支持任意矩形和圆形裁剪框
1.7.3 优化 iCloud 照片的显示与选择
...
1.5.0 可将拍照按钮放置外部;可自定义照片排序方式;Demo 页面 UI 大改版,新增若干开关;
...
1.4.5 性能大幅提升(性能测试截图请查看博客);可在照片列表页拍照;Demo 页面大幅优化;
...