Photos框架详细解析(一) —— 基本概览

版本记录

版本号 时间
V1.0 2018.02.07

前言

Photos框架使用Photos应用管理的图片和视频资源,包括来自iCloud Photo Library和Live Photos的图片和视频资源。 异步获取并缓存全尺寸资源或缩略图,修改内容并将修订同步到多个设备。接下来几篇我们就一起看一下这个框架。

Overview

下面先看一下该框架的基本信息。

下面看一下该框架的基本结构。

在iOS和MacOS中,Photos框架提供了支持为照片应用程序构建照片编辑扩展的类。 在iOS和tvOS中,Photos框架还可以直接访问由Photos应用管理的照片和视频资产,包括iCloud Photo Library。 使用此框架检索资源以进行显示和回放,编辑其图像或视频内容,或使用相册,momentsiCloud Shared Albums等资源集合。


Features & Concepts

在iOS和tvOS中,Photos框架包含许多与用户的照片库直接相关的功能。

  • Fetching objects and requesting changes.获取对象并请求更改。 Photos框架模型类(PHAssetPHAssetCollection,和PHCollectionList)的实例表示用户在Photos应用中使用的项目:资源(图像,视频和Live Photos),资源集合(如专辑或moments)以及 收藏列表(例如相册文件夹或moment clusters)。 这些对象是只读的,不可变的,只包含元数据。

您通过获取感兴趣的资源和集合,然后使用这些对象来获取需要使用的数据。 要进行更改,您可以创建更改请求对象,并将其明确提交给共享的PHPhotoLibrary对象。 这种架构使得从多个线程或多个应用程序和应用程序扩展使用相同的资产变得简单,安全和高效。

  • Change observing.改变观察。使用共享的PHPhotoLibrary对象为您获取的资产和集合注册更改处理程序。只要其他应用或设备更改资产的内容或元数据或集合中的资产列表,Photos就会告诉您的应用。 PHChange对象在每次更改之前和之后提供有关对象状态的信息,使用易于更新集合视图或类似接口的语义。

  • Support for Photos app features.支持Photos应用功能。使用PHCollectionList类查找相应于Photos应用程序中的Moments层次结构的资源。使用PHAsset类可以识别连拍照片,全景照片和高帧频视频。启用iCloud Photo Library后,Photos框架中的资源和集合反映了同一个iCloud帐户上所有设备上的可用内容。

  • Asset and thumbnail loading and caching.资产和缩略图加载和缓存。使用PHImageManager类来请求指定大小的资源的图像,或使用视频资源的AV Foundation对象。 根据您的规范Photos框架自动下载或生成图像,缓存它们以便快速重用。为了提高大量资产的性能(例如,在使用缩略图填充集合视图时),PHCachingImageManager子类会添加批量预加载。

  • Asset content editing.资产内容编辑。 PHAssetPHAssetChangeRequest类定义方法来请求照片或视频内容进行编辑,并将您的编辑提交到照片库。为了支持在不同应用和扩展程序之间进行编辑的连续性,Photos会使用描述上次编辑的 PHAdjustmentData对象来保存每个资源的当前版本和先前版本。如果您的应用程序支持先前编辑的调整数据,则可以允许用户恢复或更改编辑。

在iOS和MacOS中,Photos框架提供了用于开发照片编辑扩展以供在Photos应用程序中使用的类,然而,扩展的主要类必须采用由PhotosUI框架定义的PHContentEditingController协议。有关Photos应用程序扩展程序的详细信息,请参阅PhotosUIApp Extension Programming Guide


Topics

1. Interacting with the Photos Library

您可以使用共享照片库对象来获取用户对您的应用程序的访问权限,以访问照片内容,对资产和收藏进行更改,以及注册照片库更改时发送的更新消息。

  • PHPhotoLibrary
    • 管理对用户照片库的访问和更改的共享对象。

2. Retrieving and Examining Assets

这些模型类表示照片库的内容:资产和集合。 这些类的实例是只读的,不可变的,只包含元数据。 要使用资产和集合,可以使用这些类来获取与指定查询匹配的一组对象。

  • PHAsset

    • 照片库中的图像,视频或Live Photo的表示形式。
  • PHAssetCollection

    • 照片资源分组的表示形式,例如moment,用户创建的相册或智能相册。
  • PHCollectionList

    • 包含照片资产集合的组的表示形式,例如即时年份或用户创建的相册文件夹。
  • PHCollection

    • 照片资源收藏和收藏列表的抽象超类。
  • PHObject

    • Photos模型对象(资产和集合)的抽象超类。
  • PHFetchResult

    • 从Photos提取方法返回的资产或集合的有序列表。
  • PHFetchOptions

    • 一组选项,用于影响当您提取素材资源或集合对象时Photos返回的结果的过滤,排序和管理。

3. Loading Asset Content

使用这些类可以请求与Photos资产相关联的图像,视频或 Live Photo内容。 Photos 自动下载或生成您指定规格的图像,缓存他们以便快速重用。 您还可以请求预先加载批量图片,以便使用大量资产实现更快的性能。

  • PHImageManager

    • 提供检索或生成预览缩略图和与Photos资产相关的全尺寸图像或视频数据的方法。
  • PHCachingImageManager

    • 提供检索或生成预览缩略图和与Photos资产相关联的全尺寸图像或视频数据的方法,针对批量预加载大量资产进行了优化。
  • PHImageRequestOptions

    • 影响您从图片管理器请求的照片资源的静态图像表示的一组选项。
  • PHVideoRequestOptions

    • 影响您从图像管理器请求的视频资产数据传送的一组选项。
  • PHLivePhotoRequestOptions

    • 影响您从图片管理器请求的Live Photo资源传递的一组选项。
  • PHLivePhoto

    • Live Photo的可显示表示 - 包含拍摄前后瞬间的动态和声音的图片。

4. Requesting Changes

要更改资产或集合,请创建描述您的编辑的更改请求对象,并将其明确提交到Photos库。 这种架构使得从多个线程或多个应用程序和应用程序扩展使用相同的资产变得简单,安全和高效。

5. Editing Asset Content

在应用程序或扩展程序中使用这些类来访问资产数据进行编辑,并将编辑提交到Photos库。 Photos管理描述每个编辑的资产和调整数据的多个版本,以便您的应用或扩展程序可以允许用户恢复或继续处理先前进行的编辑,即使在不同的设备上。

要为Photos应用构建照片编辑扩展程序,请将这些类与PhotosUI框架一起使用。

  • PHContentEditingInput

    • 提供关于和访问要编辑的资产的图像,视频或Live Photo内容的信息的容器。
  • PHContentEditingOutput

    • 您向其提供编辑照片资源的照片,视频或Live Photo内容结果的容器。
  • PHAdjustmentData

    • 描述对资产的照片,视频或Live Photo内容所做的修改,使您的应用可以重建或恢复之前编辑会话的效果。
  • PHContentEditingInputRequestOptions

    • 当您请求编辑Photos资源的内容时,影响图像或视频数据传送的一组选项。
  • PHLivePhotoEditingContext

    • 用于修改Live Photo的照片,视频和音频内容的编辑会话。
  • PHLivePhotoFrame

    • 在编辑上下文中为Live Photo的单个帧提供图像内容的容器。

6. Observing Changes

只要应用中的其他应用,其他设备或代码更改资产的内容或元数据或集合中的资产列表,Photos就会告诉您的应用。 这些对象在每次更改之前和之后提供有关对象状态的信息,使您可以轻松更新用户界面以进行匹配。

7. Working with Asset Resources

一个或多个资产资源对象代表每个Photos资产的基础数据存储。 使用这些对象直接使用这些资源,例如备份和恢复资源。

8. Classes

9. Reference

后记

本篇已结束,后面更精彩~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • PhotoKit类组成: PHAdjustmentData,继承自NSObject,代表调整的数据.当用户编辑了一...
    小暖风阅读 1,713评论 0 0
  • 版本记录 前言 PhotosUI框架在Photos应用中创建自定义的扩展,以便编辑照片,视频和Live Photo...
    刀客传奇阅读 2,143评论 0 1
  • 父类:NSObject 展示一张Live Photo——这个照片包含了拍摄时刻之前以及之后的动作和声音。 一、概述...
    Shmily落墨阅读 6,400评论 2 6
  • 前言 iOS8之后,苹果推出新的管理图库资源框架Photos,相比于之前的ALAssetsLibrary框架来说,...
    CoderP1阅读 2,434评论 7 9
  • 导读 对于 Photos 框架的介绍,推荐观看 objccn.io 的文章。写得真好,我写得的文章水准还差得老远啊...
    seedante阅读 67,154评论 47 183