文章目录

  • 什么是PhotoKit
  • 具体常用的类
  • PHPhotoLibrary
    • 创建与删除
    • 监听与获取
    • 更新
    • Library的操作
    • 其他

什么是PhotoKit

苹果的PhotoKit,是提供给开发者的对本地相册库的和iCloud 相册的资源进行操作的API,所有资源以PHAsset的形式来提供给PhotoKit使用,同时本地的图片库和iCloud图片的变动通知,会发送给PhotoKit;同时,PhotoKit也可以通过 变更请求 (编辑请求,改变请求,删除请求…)来对资源进行变更.


具体常用的类

PHObject: 抽象基类,其他PhotoKit类都继承该类,提供了一个localIdentifier属性

PHPhotoLibrary: 表示用户的照片库,用于请求、获取照片库的权限,监听照片库的变化;

PHAsset: 表示照片库中的一个单独的资源(可以是图片,也可以是视频;与ALAsset类似),用于获取、保存资源的元数据;PHAsset只包含元数据(如图片大小、创建日期等),具体的图片、视频数据需要使用PHImageManager进行加载;
若一个资源的representsBurst属性为true,则表示该资源是一系列连拍照片中的代表照片,可以通过fetchAssetsWithBurstIdentifier()方法,传入burstIdentifier属性,获取连拍照片中的剩余的其他照片;

PHAssetCollection: 资源集合,表示成组的资源;可以表示照片库中的一个相册、时刻、智能相册;
智能相册:系统默认提供的特定相册,如最近删除、视频列表、收藏等;

PHCollectionList: 表示一组PHCollections的集合;其本身也是PHCollection,故PHCollectionList也可以包含其他的PHCollectionList;

PHPhotoLibrary

PHPhotoLibrary类型的对象是对照片应用的所有的资源以及所有的集合进行管理的表现,包括了存储在本地设备上的资源和(如果允许的话)存储在iCloud上的资源。使用这个对象可以对照片库中的对象进行更改——例如,编辑资源数据或内容,插入一个新的资源,再或者更改一个集合中的成员。你也可以使用照片库对象注册Photos发送是否更改资源或集合的内容或者数据的消息,验证用户是否授权你的应用程序访问Photos的内容。

PHAsset,PHAssetCollection以及PHCollectionList
类型的实例是不可更改的对象。因此,想要修改Photos的资源或者集合,你应该使用共享的照片库来执行一个更改回调。在更改回调里面创建一个更改请求对象。你使用下面的“申请更改照片库”中的一个方法来申请一个更改回调。你在回调中申请的更改将在Photos运行这个回调并且调用你的完成处理回调之后生效。

每个更改请求的类——PHAssetChangeRequest,PHAssetCollectionChangeRequest和PHCollectionListChangeRequest——都对应一个资源或集合类。

创建与删除

  • + (instancetype)creationRequestForAssetCollectionWithTitle:(NSString *)title;

创建一个集合

  • + (void)deleteCollectionLists:(id)collectionLists;

删除一个集合列表。

监听与获取

  • - (void)registerChangeObserver:(id)observer;

方法来注册一个监听器.当图片库中的一个对象发生改变的时候接收通知。
监听变化后使用PHPhotoLibraryChangeObserver协议接收更改。

  • (void)unregisterChangeObserver:(id)observer;

移除一个已经注册的监听器,使得这个监听器不再接收图片库中一个对象的改变通知。

  • - (PHFetchResult<PHAsset *> *)fetchAssetsWithOptions:(PHFetchOptions *)options;)

来获取资源或者集合,Photos会自动注册你获取到的内容为监听器的监听内容。

更新

PHAssetChangeRequest: 用来创建、删除和修改PHAsset对象;

PHAssetCollectionChangeRequest: 用来创建、删除和修改PHAssetCollection对象;

PHCollectionListChangeRequest: 用来创建、删除和修改PHCollectionList对象;

Library的操作

  • + (PHPhotoLibrary *)sharedPhotoLibrary;

获取获取共享照片库对象,即获取PHPhotoLibrary的单例。

  • - (void)performChanges:(dispatch_block_t)changeBlock completionHandler:(nullable void(^)(BOOL success, NSError *__nullable error))completionHandler;

异步运行changeBlock回调,来请求执行对照片库的修改。Photos会在任意的串行队列上调用你的changeBlock回调和handler回调,如果你的回调中有需要与UI进行交互的内容,请将此工作分配到主线程。对于每次调用此方法,Photos都会展示一个提示告诉用户,请求用户允许编辑照片库内容。如果你的应用程序需要同时提交几个更改,请将它们合并到一个changeBlock中。

  • /- (BOOL)performChangesAndWait:(dispatch_block_t)changeBlock error:(NSError *__autoreleasing *)error;

同步运行changeBlock回调,来请求执行对照片库的修改。不要再主线程中执行此方法。由于执行此方法会向用户请求编辑照片库的权限,并且需要一定的时间进行修改,所以在主线程中执行此方法可能会导致无限期的阻塞主线程。

其他

  • + (PHFetchResult *)fetchAssetCollectionsWithLocalIdentifiers:(NSArray *)identifiers options:(nullable PHFetchOptions *)options;

该方法通过唯一标识符identifiers来获取相册 PHFetchOptions为将要获取到了相册的相关属性对象

  • + (PHFetchResult *)fetchAssetCollectionsWithLocalIdentifiers:(NSArray *)identifiers options:(nullable PHFetchOptions *)options;

该方法通过PHAssetCollectionType 相册分类枚举值获取相关相册 PHAssetCollectionSubtype 为子类型 即进一步想相册分类 如Album和 AlbumCoundShared组合表示从iTunes同步来的 并且是从icloud分享来的相册

相关枚举值如下
typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
PHAssetCollectionTypeAlbum= 1, //从iTunes同步而来的及用户自建的相册
PHAssetCollectionTypeSmartAlbum = 2,//相机拍摄而成的相册
PHAssetCollectionTypeMoment= 3,//Photos为我们自动生成的时间分组相册
}

enumPHAssetCollectionSubtype : Int {
caseAlbumRegular //用户在 Photos 中创建的相册
caseAlbumSyncedEvent //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步过来的事件。然而,在iTunes 12 以及iOS 9.0 beta4上,选用该类型没法获取同步的事件相册,而必须使用AlbumSyncedAlbum。
caseAlbumSyncedFaces //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步的人物相册。
caseAlbumSyncedAlbum//做了 AlbumSyncedEvent 应该做的事
caseAlbumImported//从相机或是外部存储导入的相册,完全没有这方面的使用经验,没法验证。
caseAlbumMyPhotoStream//用户的 iCloud 照片流
caseAlbumCloudShared//用户使用 iCloud 共享的相册
caseSmartAlbumGeneric//文档解释为非特殊类型的相册,主要包括从 iPhoto 同步过来的相册。由于本人的 iPhoto 已被 Photos 替代,无法验证。不过,在我的 iPad mini 上是无法获取的,而下面类型的相册,尽管没有包含照片或视频,但能够获取到。
caseSmartAlbumPanoramas//相机拍摄的全景照片
caseSmartAlbumVideos//相机拍摄的视频
caseSmartAlbumFavorites//收藏文件夹
caseSmartAlbumTimelapses//延时视频文件夹,同时也会出现在视频文件夹中
caseSmartAlbumAllHidden//包含隐藏照片或视频的文件夹
caseSmartAlbumRecentlyAdded//相机近期拍摄的照片或视频
caseSmartAlbumBursts//连拍模式拍摄的照片,在 iPad mini 上按住快门不放就可以了,但是照片依然没有存放在这个文件夹下,而是在相机相册里。
caseSmartAlbumSlomoVideos//Slomo 是 slow motion 的缩写,高速摄影慢动作解析,在该模式下,iOS 设备以120帧拍摄。不过我的 iPad mini 不支持,没法验证。
caseSmartAlbumUserLibrary//这个命名最神奇了,就是相机相册,所有相机拍摄的照片或视频都会出现在该相册中,而且使用其他应用保存的照片也会出现在这里。
caseAny//包含所有类型
}

IOS中相册的一般处理相关推荐

  1. iOS - 选取相册中iCloud云上图片和视频的处理

    关于iOS选取相册中iCloud云上图片和视频 推荐看: TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因, ...

  2. iOS获取相册视频文件封面图 选取手机中的音频、视频文件并导出数据。

    应项目需求,需要实现本地选取并上传图片.音频和视频文件. 其中选取图片这块有很多开源框架,不再赘述.本文主要是采用iOS自带的类MPMediaPickerController 来实现UIImagePi ...

  3. 对ios中CGContextRef和image的处理

      转自:http://blog.csdn.net/likendsl/article/details/7662739 1.UIImageView不支持内部图片平铺(tile) 2.资源中的图片要用小写 ...

  4. iOS从相册选择图片并裁剪,可用于上传头像

    iOS从相册选择图片并裁剪 前言 笔者最近接了一个任务,是从手机相册选择图片并裁剪后上传.于是在裁剪的这一块,我用了VPImageCropper.从相册获取图片,我一开始看的是TZImagePicke ...

  5. iOS中ImageIO框架详解与应用分析

    2019独角兽企业重金招聘Python工程师标准>>> iOS中ImageIO框架详解与应用分析 一.引言 ImageIO框架提供了读取与写入图片数据的基本方法,使用它可以直接获取到 ...

  6. ios识别人脸自动拍照_真的逆天?iOS 10相册识别人脸的秘密

    在今年的WWDC大会上,苹果正式发布了iOS 10系统,虽然其中诸多"新特性"我们早已在安卓系统中见识过了,但作为苹果用户依旧还是非常期待这些细节上的变化.根据大会上的演示,在iO ...

  7. android ios 相册图片多选,iOS实现相册多选图片上传功能

    本文实例为大家分享了iOS实现相册多选图片上传的具体代码,供大家参考,具体内容如下 原理:获取手机里的全部照片,显示在自定义的视图里 //获取到相册的所有图片 - (void)addAllPhotos ...

  8. 【Ios】 Unity for iOS 打开相册、相机及保存图片到相册

    偶然在网上看到一位博主写的 unity 和ios 交互 个人感觉 功能很全 转载地址:http://blog.csdn.net/AnYuanLzh/article/details/50748928 在 ...

  9. ios 获取相册第一个视频_历史上第一个视频游戏

    ios 获取相册第一个视频 重点 (Top highlight) Looking closely at the oscilloscope, you what function the picture ...

最新文章

  1. 应用程序进程(二):启动线程池
  2. python webdriver点击指令_测开系列Selenium Webdriver Python(20)--Webdriver运行原理
  3. Android相对布局(RelativeLayout)
  4. 【中级软考】什么是实时操作系统?(RTOS:Real Time Operating System)
  5. 浏览器中插入富文本编辑器
  6. python中的map、filter、reduce函数
  7. SpringBoot项目运行jar包启动
  8. 新浪微博被罚了,暂停更新微博热搜榜一周
  9. 移动项目工作笔记0002---使用Weex开发移动端应用
  10. tomcat 设置xms xmx,采用startup.bat启动和采用操作系统服务启动区别
  11. 操作系统文件管理_计算机民科笔记-操作系统week1
  12. 卫星协同观测的学习笔记
  13. 正则表达式:re.match、re.search、re.sub、re.compile、findall、re.finditer、re.split
  14. 145. 大小写转换
  15. paip.目录文件列表排序算法
  16. Linux命令学习笔记之 network NetworkManager
  17. VUE使用benz-amr-recorder 实现解码、播放
  18. 计算机 分类号,中图法分类号(计算机,自动化)(CLC number (computer, automation)).doc...
  19. vue 动态插入子路由
  20. 【机器学习与算法】python手写算法:Kmeans和Kmeans++算法

热门文章

  1. (四)深入理解蓝牙BLE之“ACL Packet格式”
  2. IOS 收起键盘的几种方法(转)
  3. 教你制作手机电子书android应用 无技术要求
  4. 对地球币EAC价值趋势发展的解析探讨
  5. 苹果6用U盘越狱_苹果上存在6年的第三方微博客户端,不要太好用
  6. 企业微信开发第三方应用开发视频教程,ToB Dev李月喜全网首发
  7. 拼团返利商城小程序怎么搭建_分享拼团返利商城小程序的作用
  8. 典型的软件过程几种模型
  9. 2015中国创新型软件公司TOP100排行榜
  10. 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等