领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

iOS PhotoKit简单用法

nixiaole 2025-04-27 15:31:52 知识剖析 7 ℃

通过一个简单的app演示,你将学习到一下知识点:

  1. 了解photoKit的授权
  2. 访问图像数据
  3. 展示图片
  4. 修改asset的元数据(metadata)
  5. 编辑asset的图片
  6. 保存修改后的图片asset
  7. 恢复修改后的图片到原图片

运行这个简单的app后,运行如下图片:

那么开始的第一步:获取PhotoKit的授权

它会展示一个对话框请求用户让app访问他们的图片,你要访问和修改图片之前,首先要获得授权。你将会使用到PHPhotoLibrary这个对象访问图片库,也就是你手机上的图片app。开始之前先要做一些配置:

  1. 打开项目的info.plist
  2. 右击属性列表选择添加一行(add row)
  3. 点击enter键输入NSPhotoLibraryUsageDescription,然后点击值的那一列输入一些访问的理由如want to access your photos,这个没有限制,最好是相关的理由。

第二步就要请求授权:

打开
AlbumCollectionViewController.swift文件,找到getPermissionIfNecessary(completionHandler:)方法,用以下代码来替代方法里面的内容。

在viewDidLoad()调用该方法,然后运行项目,结构如下图:

在开始下一步之前,首先理解一下Asset的概念,即使我们最终是获取图片,但是在PhotoKit中,我们大多数是和assets做交流。考虑一下你如何与“照片”应用进行交互。您可以查看图像,但是其中还包含诸如喜欢标记和地理编码的位置数据之类的元数据。不限于图像照片,还包含LivePhotos和视频。只用图片是表示不了这些,这就是PHAsset出现的原因。

PHAsset是描述图像,LivePhoto或视频的元数据。它是不可变的,不包含图像本身,但确实提供了获取图像所需的信息。它还包含大量信息,例如创建和修改日期,位置数据,喜欢和隐藏状态等等。有时需要处理一组assets,这些通常作为PHAssetCollection对象返回。

接着第二步,打开
AlbumCollectionViewController.swift,在sections属性下加入如下属性:

可以简单的理解PHFetchResult是数组,从本质上讲,它是一个数组。它包含所有相同的数组方法和约定,例如count()和index(of :)。 另外,它可以智能地处理数据的获取,缓存和根据需要重新获取。你将PHFetchResult视为asset或assetCollection的数组就可以了。

接下来获取Assets and Asset Collections:

还是在
AlbumCollectionViewController.swift,添加以下方法:

以上步骤的一些分析:

  1. 当获取asset时,可以应用选项(options)来指示结果的排序,过滤和管理。创建一个排序描述符,该描述符按创建日期从最新到最旧的顺序对assets进行排序。
  2. PHAsset提供了用于获取asset并将结果作为PHFetchResult返回的功能。在这里,将上面创建的选项传递给它,并将结果分配给allPhotos。
  3. “照片”应用程序会自动创建智能相册,例如“喜欢”和“最新记录”。相册是一组assets,因此属于PHAssetCollection对象。你不对它们进行排序,因此选项为nil。
  4. 访问用户创建的相册的方法类似,不同之处在于你获取.album类型。

获取了数据源后,我们可以更新我们的UI了。

编译运行后如下图:

接着我们需要从asset中获取图片的信息:

将使用PHImageManager。图像管理器处理从asset中获取图像并缓存结果以供以后快速检索。

打开 UIImageView+Extension.swift,添加以下方法:

编译运行后如下图:

接下来是获取album的asset,这部分和剩下的下篇再说。

英文原文的如下:
https://www.raywenderlich.com/11764166-getting-started-with-photokit#toc-anchor-006

最近发表
标签列表