网站首页 > 知识剖析 正文
通过一个简单的app演示,你将学习到一下知识点:
- 了解photoKit的授权
- 访问图像数据
- 展示图片
- 修改asset的元数据(metadata)
- 编辑asset的图片
- 保存修改后的图片asset
- 恢复修改后的图片到原图片
运行这个简单的app后,运行如下图片:
那么开始的第一步:获取PhotoKit的授权
它会展示一个对话框请求用户让app访问他们的图片,你要访问和修改图片之前,首先要获得授权。你将会使用到PHPhotoLibrary这个对象访问图片库,也就是你手机上的图片app。开始之前先要做一些配置:
- 打开项目的info.plist
- 右击属性列表选择添加一行(add row)
- 点击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,添加以下方法:
以上步骤的一些分析:
- 当获取asset时,可以应用选项(options)来指示结果的排序,过滤和管理。创建一个排序描述符,该描述符按创建日期从最新到最旧的顺序对assets进行排序。
- PHAsset提供了用于获取asset并将结果作为PHFetchResult返回的功能。在这里,将上面创建的选项传递给它,并将结果分配给allPhotos。
- “照片”应用程序会自动创建智能相册,例如“喜欢”和“最新记录”。相册是一组assets,因此属于PHAssetCollection对象。你不对它们进行排序,因此选项为nil。
- 访问用户创建的相册的方法类似,不同之处在于你获取.album类型。
获取了数据源后,我们可以更新我们的UI了。
编译运行后如下图:
接着我们需要从asset中获取图片的信息:
将使用PHImageManager。图像管理器处理从asset中获取图像并缓存结果以供以后快速检索。
打开 UIImageView+Extension.swift,添加以下方法:
编译运行后如下图:
接下来是获取album的asset,这部分和剩下的下篇再说。
英文原文的如下:
https://www.raywenderlich.com/11764166-getting-started-with-photokit#toc-anchor-006
- 上一篇: 扫盲Kafka?看这一篇就够了!
- 下一篇: AspNetCore中的文件上传与下载优化
猜你喜欢
- 2025-04-27 C#与TypeScript语法深度对比
- 2025-04-27 ES6从入门到精通学习路径
- 2025-04-27 前端面试-Web Worker:让你的网页不再“卡到崩溃”的秘诀
- 2025-04-27 Spring Data JPA避坑指南:99%新手踩过的坑我都帮你填平了!
- 2025-04-27 AspNetCore中的文件上传与下载优化
- 2025-04-27 扫盲Kafka?看这一篇就够了!
- 2025-04-27 JavaScript 神奇语法糖:让你的代码更简洁高效掌握这些简写技巧
- 2025-04-27 (国产CAD SDK)网页CAD的配置属性的如何设置
- 2025-04-27 前端面试-Blob分析,不常用,就怕面试官有毒
- 2025-04-27 为什么 JS 开发者更喜欢 Axios 而不是 Fetch?
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)