图库 2.4.0

图库 2.4.0

测试已测试
语言语言 SwiftSwift
许可证 NOASSERTION
发布最后发布2020年10月
SPM支持 SPM

Khoa PhamHyper Interaktiv ASElvis Nuñez 维护。



图库 2.4.0

Gallery Banner

Version Carthage Compatible License Platform Swift

描述

Gallery Icon

我们都喜欢图片选择器,不是吗?您可能已经知道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

解析

委托方法为您提供ImageVideo,它们只是PHAsset的包装器。要获取实际的资产信息,我们提供了许多方便的方法。请参阅示例

图像

  • 使用实例方法resolve获取实际的UIImage
  • 使用静态方法Image.resolve解析图像列表

视频

  • 使用实例方法fetchDurationfetchPlayerItemfetchAVAssetfetchThumbnail来获取有关已选视频的更多信息。

权限

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更关注视频,并提供了编辑功能。我们有VideoEditorAdvancedVideoEditor用于裁剪、调整大小、缩放和定义所选视频的质量

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许可协议下。更多信息请参阅许可文件