引言
在之前的博客中,我们通过使用 PhotoKit 框架的相关知识,成功实现了一个自定义的媒体选择器。虽然这个选择器功能丰富,并支持各种定制,几乎能够满足大多数需求,但对于那些对细节有着极高要求的应用来说,这样的实现仍然不够全面。权限申请、隐私政策、数据缓存、资源修改、创建相册等功能,都是 PhotoKit 框架为我们提供的强大能力,使我们可以实现更高程度的定制。在接下来的专栏中,我们将逐步深入探索和运用这些功能,帮助大家打造高度自定义的媒体管理方案。
在本篇博客中,我们将首先概述一下 PhotoKit 框架,并介绍它为我们提供的各种媒体操作类及其作用。
简介
我们不仅可以使用 PhotoKit 框架来访问设备上的图片和视频资源,还能够编辑照片、管理相册并分享相册。此外,PhotoKit 还支持访问 iCloud 中的照片资源,使得我们可以全面管理和操作本地及云端的媒体内容。
除此之外,使用PhotoKit框架还可以构建应用扩展,并且将扩展应用功能直接集成到iOS或者macOS的照片应用中,这样用户可以在照片应用内直接使用我们构建的扩展应用。
功能
让我们先来看一下PhotoKit框架为我们提供了哪些具体的功能,以及这些功能都改怎么调用。
隐私政策
PhotoKit采用最新的隐私政策增强功能来提供高级用户隐私控制,具体的体现为除了运行授权和拒绝以为还为用户提供了一个照片选择选项,它的具体功能我们在后面的博客会介绍到。
浏览和修改相册
PHPhotoLibrary
用户可以使用PHPhotoLibrary将照片整理到相册,创建和修改相册。包括指定相册的授权。
系统照片选择器
PHPickerViewController
使用PHPickerViewController可以直接调起系统为我们提供的照片选择器,它为用户提供了完整的媒体选择流程,相对UIImagePickerController它可以选择多张图片。
媒体资源搜索
我们的所有媒体资源都存在媒体库当中,需要使用适当的检索方式来获取我们需要的资源,检索时需要涉及到很多类和方法,下面我们先来看一下检索时所需要用到的类都有哪些。
PHAsset
这个类很重要是照片库中的图片、视频、或者是实况照片最终的表示,在自定义的媒体选择器中最中被添加到列表数组中的数据就是它。
PHAssetCollection
这个类指的是相册,一种是用户自己创建的相册,它们会有明确的相册名称,另外一种系统为我们自行分配的智能相册,比如最近照片,在自定义的媒体选择相册列表中我们检索出的就是这个类的对象。
PHCollection
它是相册类的父类,是一个抽象类,通常我们不会直接与它打交道,而是它的子类PHAssetCollection,或者PHCollectionList。
PHCollectionList
也是PHCollection的一个具体子类,与PHAssetCollection不同的是,PHCollectionList指的是一个集合的集合,用于表示其它相册的分组。可以理解为比PHAssetCollection更高一级。PHCollectionList可以包含多个PHAssetCollection或者PHCollectionList。
主要用来管理PHAssetCollection的组,比如系统的“时刻”“年份”或者是用户自己创建的相册。
PHObject
这个类也是一个抽象超类,表示具体的媒体对象比如照片,相册,相册集合。PHAsset,PHCollection,以及PHCollectionList等等最中的父类都是PHObject。
PHFetchResult
这个类也很重要,所有的检索获取的到结果都是PHFetchResult的对象,它表示检索后获取到的媒体资源或者媒体资源集合的有序列表。
PHFetchOptions
搜索时可选的设置选项,比如过滤一些不想要的资源,对获取的资源按照指定的方式排序等等。
媒体资源加载
我们从PHFetchResult获取到的最后的检索数据都是以PHAsset对象的形式呈现,但事实上它并不是最终我们需要呈现图片或者视频的源文件,也不包括图片或者视频,毕竟如果将源文件包含在里面那当加载数据稍微多一点可能就会造成内存溢出了。
所以我们在呈现之前还需要做一个额外的步骤,资源加载,也就是请求图像或者视频,在这时候还可以将数据进行缓存以便重复使用。
下面就来看一下资源加载和缓存时使用到的类。
PHImageManager
这个类很重要,在构建自定义的媒体选择器中,我们就曾多次使用到了它,用于获取资源的缩略图,原图或者是视频文件地址。
PHCachingImageManager
PHCachingImageManager是PHImageManager的子类,它专门针对批量预加载大量资源的操作,特别是在需要滚动视图中迅速展示大量缩略图时,通过缓存和预加载的机制减少用户滚动时的延迟。
PHImageRequestOptions
用于配置加载图片的时的可配选项,比如是否同步请求,图像的交付模式,是否加载iCloud图片,请求回调等等。
PHVideoRequestOptions
和PHImageRequestOptions类似,都是配置选项,只是它针对的是视频资源的请求。
PHLivePhotoRequestOptions
也是和上面两个类似,请求的配置选项,专门针对Live Photo资源的请求。
实况照片
PhotoKit框架提供给我们了与iOS照片应用相同的实况照片的交互逻辑。具体需要使用一下两个类。
PHLivePhotoView
用于显示实况照片,照片将会展示拍摄前后瞬间的动作和声音。
PHLivePhoto
实况照片实体,是包含了拍摄前后瞬间的动作和声音的一种图片。
媒体资源管理
PhotoKit框架还提供了管理和操作媒体资源照片,视频,或者是相册的方案。允许我们深入到资源的底层数据进行管理,包括创建,读取,以及操作资源数据,所用到的类有以下几种。
PHAssetResource
它是表示与媒体资源照片,视频或者实况照片相关的底层数据资源。每个PHAsset都可能包含一个或者多个资源,比如原始图像数据、调整后的图像数据、视频文件等等。这个类就允许我们访问这些底层的数据。
PHAssetCreationRequest
它用于创建和添加新的照片或者视频到照片中。
PHAssetResourceCreationOptions
这个类指的是在创建新的照片或者视频时可以修改的一些选项,比如元数据,文件类型等等。
PHAssetResourceManager
它是用于管理和操作照片或者视频底层数据的管理器,通过它我们可以访问,导出或者是删除照片或视频的底层资源数据。
PHAssetResourceRequestOptions
也是一个选项,用来配置使用PHAssetResourceManager请求底层资源数据时的选项,允许我们设置请求的同步性,进度回调等等。
照片编辑扩展
PhotoKit可以创建照片编辑扩展,可以让用户在照片应用中直接使用我们提供的扩展来编辑照片,比如添加滤镜,特效等等。
PHContentEditingController
这是一个协议,用于定义我们自定义视图控制器如何为照片编辑扩展提供用户操作页面。
通过这个协议,你可以创建一个用户界面,让用户在照片应用中与照片编辑工具进行交互。
结语
在这篇博客中,我们对 PhotoKit 框架进行了初步的概述,了解了它在 iOS 中管理照片、视频等媒体资源的强大功能。我们探讨了 PhotoKit 的核心类和它们的作用,包括如何管理照片库中的资源、创建和编辑照片、以及扩展系统照片应用的功能。PhotoKit 提供的丰富 API 使开发者能够在应用中实现高度自定义的媒体管理和编辑功能。
在接下来的博客中,我们将深入探讨这些类的具体用法,首先从权限管理开始,逐步解锁 PhotoKit 在实际开发中的更多潜力。无论是访问用户的照片库,还是创建复杂的媒体处理逻辑,掌握这些知识将使你能够更好地构建功能强大的媒体应用。