描述
我们都喜欢图片选择器,不是吗?您可能已经知道ImagePicker,这是用于捕获图片和选择图像的全能解决方案。嗯,它还有一个叫 Gallery
的兄弟,基于同一台为 ImagePicker 提供动力的引擎。Gallery 基于专辑拥有更清晰的流程,并专注于选择视频的场景。如果这符合您的需求,就试一试吧
《Gallery》有 3 个选项卡,可以通过滑动手势轻松导航
- 图片:选择专辑和图片。使用高亮数字处理选择,这样您的用户就不会忘记顺序
- 相机:您的摄影师技能在这里
- 视频:显示所有视频并选择。目前的使用场景是每次选择一个视频
并且没有零依赖项
使用
展示
GalleryController
是主要入口点,只需实例化并提供代理即可
let gallery = GalleryController()
gallery.delegate = self
present(gallery, animated: true, completion: nil)
内容控制器在用户导航到之前不会加载,这提供了更快的体验。
委托
GalleryControllerDelegate
要求您实现一些委托方法,以便与选择器交互
func galleryController(_ controller: GalleryController, didSelectImages images: [Image])
func galleryController(_ controller: GalleryController, didSelectVideo video: Video)
func galleryController(_ controller: GalleryController, requestLightbox images: [Image])
func galleryControllerDidCancel(_ controller: GalleryController)
轻量窗口委托方法是显示选中图像的机会。如果您正在寻找一个不错的解决方案,这里就是我们使用并喜爱的Lightbox
解析
委托方法为您提供Image
和Video
,它们只是PHAsset
的包装器。要获取实际的资产信息,我们提供了许多方便的方法。请参阅示例
图像
- 使用实例方法
resolve
获取实际的UIImage - 使用静态方法
Image.resolve
解析图像列表
视频
- 使用实例方法
fetchDuration
、fetchPlayerItem
、fetchAVAsset
、fetchThumbnail
来获取有关已选视频的更多信息。
权限
Gallery
为您处理权限。它会在首次启动时检查并请求使用照片和相机权限。截至iOS 10,我们需要在plist文件中明确声明使用描述
<key>NSCameraUsageDescription</key>
<string>This app requires access to camera</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to photo library</string>
配置
Config
结构体中有很多可定制的点。例如
Config.Permission.image = UIImage(named: ImageList.Gallery.cameraIcon)
Config.Font.Text.bold = UIFont(name: FontList.OpenSans.bold, size: 14)!
Config.Camera.recordLocation = true
Config.tabsToShow = [.imageTab, .cameraTab]
视频编辑器
Gallery
更关注视频,并提供了编辑功能。我们有VideoEditor
和AdvancedVideoEditor
用于裁剪、调整大小、缩放和定义所选视频的质量
func galleryController(_ controller: GalleryController, didSelectVideo video: Video) {
controller.dismiss(animated: true, completion: nil)
let editor = VideoEditor()
editor.edit(video: video) { (editedVideo: Video?, tempPath: URL?) in
DispatchQueue.main.async {
if let tempPath = tempPath {
let controller = AVPlayerViewController()
controller.player = AVPlayer(url: tempPath)
self.present(controller, animated: true, completion: nil)
}
}
}
}
使用Video
对象,您可以捕获项目、高级资产和缩略图
当然,您还可以自定义它
Config.VideoEditor.maximumDuration = 30
Config.VideoEditor.savesEditedVideoToLibrary = true
安装
图库可以通过CocoaPods获得。为了安装它,只需将以下行添加到您的Podfile中
pod 'Gallery'
图库也可以通过Carthage获得。要安装,只需在Cartfile中写下
github "hyperoslo/Gallery"
图库还可以手动安装。只需下载并将项目中的资源
文件夹丢弃。
作者
Hyper Interaktiv AS, [email protected]
贡献
我们非常欢迎您为图库做出贡献,有关更多信息请参阅贡献指南。
许可协议
图库发布在MIT许可协议下。更多信息请参阅许可文件。