iOS-PhotoKit

苹果API:https://developer.apple.com/reference/photos
参考://www.greatytc.com/p/42e5d2f75452
参考:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html

首先简单介绍几个概念:

PHAsset: 代表照片库中的一个资源,通过 PHAsset 可以获取和保存资源。
PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值。
PHFetchResult: 表示一系列的资源集合,也可以是相册的集合。
PHAssetCollection: 表示一个相册或者一个时刻,或者是一个「智能相册(系统提供的特定的一系列相册,例如:最近删除,视频列表,收藏等等,如下图所示)。
PHImageManager: 用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions 控制资源的输出尺寸等规格。
PHImageRequestOptions: 如上面所说,控制加载图片时的一系列参数。


ios8-photo-kit-1.png
typedef NS_ENUM(NSInteger, PHAssetCollectionType) {
    PHAssetCollectionTypeAlbum      = 1,//从 iTunes 同步来的相册,以及用户在 Photos 中自己建立的相册(2-101)
    PHAssetCollectionTypeSmartAlbum = 2,//经由相机得来的相册(200-211)
    PHAssetCollectionTypeMoment     = 3,//Photos 为我们自动生成的时间分组的相册
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
/*
之前看过几个篇其他的文章,有些人可能对PHAssetCollectionTypeAlbum(Albums can be created in the Photos app or appear on an iOS device through iTunes sync)
和PHAssetCollectionTypeSmartAlbum(The Photos app displays built-in smart albums to group certain kinds of related assets)有些迷惑,我们只要看苹果的API的描述就可以了。

PHAssetCollectionTypeAlbum是从iTunes同步或者用户自己在Photo App中建立的相册,它是可以删除的;
PHAssetCollectionTypeSmartAlbum是把各个文件夹中的相片,通过不同的约束条件进行分类的,属于系统的操作,你会发现系统的相册是不能删除的。

`PHAssetCollection` 类有个属性 `estimatedAssetCount`,可以用来快速获取该相册中的照片和视频的数量,但是在 PHAssetCollectionTypeSmartAlbum 上该属性永远为一个很大的数字(0),
这个苹果官方API也有描述:`This count may not match the current number of assets in the collection. To get the most recent count, fetch the collection’s assets with the fetchAssetsInAssetCollection:options: method and read the count property of the fetch result.
If asset count information is not available for the collection, this property’s value is NSNotFound.`
`estimatedAssetCount`只能初略的统计相册和视频的数量,对于动态变化的相册是不能统计的,要用其他的方法去计算数量。
*/
typedef NS_ENUM(NSInteger, PHAssetCollectionSubtype) {
    
    // PHAssetCollectionTypeAlbum regular subtypes
    PHAssetCollectionSubtypeAlbumRegular         = 2,//用户在 Photos 中创建的相册,也就是我所谓的逻辑相册
    PHAssetCollectionSubtypeAlbumSyncedEvent     = 3,//使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步过来的事件。然而,在iTunes 12 以及iOS 9.0 beta4上,选用该类型没法获取同步的事件相册,而必须使用AlbumSyncedAlbum。
    PHAssetCollectionSubtypeAlbumSyncedFaces     = 4,//使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步的人物相册。
    PHAssetCollectionSubtypeAlbumSyncedAlbum     = 5,//做了 AlbumSyncedEvent 应该做的事
    PHAssetCollectionSubtypeAlbumImported        = 6,//从相机或是外部存储导入的相册,完全没有这方面的使用经验,没法验证。
    
    // PHAssetCollectionTypeAlbum shared subtypes
    PHAssetCollectionSubtypeAlbumMyPhotoStream   = 100,//用户的 iCloud 照片流
    PHAssetCollectionSubtypeAlbumCloudShared     = 101, //用户使用 iCloud 共享的相册
    
    // PHAssetCollectionTypeSmartAlbum subtypes
    PHAssetCollectionSubtypeSmartAlbumGeneric    = 200,//文档解释为非特殊类型的相册,主要包括从 iPhoto 同步过来的相册。由于本人的 iPhoto 已被 Photos 替代,无法验证。不过,在我的 iPad mini 上是无法获取的,而下面类型的相册,尽管没有包含照片或视频,但能够获取到。
    PHAssetCollectionSubtypeSmartAlbumPanoramas  = 201,//相机拍摄的全景照片
    PHAssetCollectionSubtypeSmartAlbumVideos     = 202,//相机拍摄的视频
    PHAssetCollectionSubtypeSmartAlbumFavorites  = 203,//收藏文件夹
    PHAssetCollectionSubtypeSmartAlbumTimelapses = 204,//延时视频文件夹,同时也会出现在视频文件夹中
    PHAssetCollectionSubtypeSmartAlbumAllHidden  = 205,//包含隐藏照片或视频的文件夹
    PHAssetCollectionSubtypeSmartAlbumRecentlyAdded = 206,//相机近期拍摄的照片或视频
    PHAssetCollectionSubtypeSmartAlbumBursts     = 207,//连拍模式拍摄的照片,在 iPad mini 上按住快门不放就可以了,但是照片依然没有存放在这个文件夹下,而是在相机相册里。
    PHAssetCollectionSubtypeSmartAlbumSlomoVideos = 208,//Slomo 是 slow motion 的缩写,高速摄影慢动作解析,在该模式下,iOS 设备以120帧拍摄。不过我的 iPad mini 不支持,没法验证。
    PHAssetCollectionSubtypeSmartAlbumUserLibrary = 209,//这个命名最神奇了,就是相机相册,所有相机拍摄的照片或视频都会出现在该相册中,而且使用其他应用保存的照片也会出现在这里。
    PHAssetCollectionSubtypeSmartAlbumSelfPortraits PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 210,//前置摄像头所拍摄的所有照片和视频
    PHAssetCollectionSubtypeSmartAlbumScreenshots PHOTOS_AVAILABLE_IOS_TVOS(9_0, 10_0) = 211,//所有的截图
    
    // Used for fetching, if you don't care about the exact subtype
    PHAssetCollectionSubtypeAny = NSIntegerMax//包含所有类型
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);

NSMutableArray *dataArray = [NSMutableArray array];
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc]init];
//检索的结果,subtype如果不选或者选错,系统会选择默认的类型
PHFetchResult *smartAlbumsFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:fetchOptions];
    
//遍历相机胶卷
[smartAlbumsFetchResult enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
        //过滤视频,只剩下相册
    if (![collection.localizedTitle isEqualToString:@"Videos"]) {
    }
}];
    
    
//遍历自定义相册
PHFetchResult *smartAlbumsFetchResult1 = [PHAssetCollection fetchTopLevelUserCollectionsWithOptions:fetchOptions];
    
    [smartAlbumsFetchResult1 enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
      //遍历返回的结果

}];

***未完持续更新*****

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

推荐阅读更多精彩内容

  • 本文转载自Kayo Lee发表的文章,本文链接:http://kayosite.com/ios-developme...
    JackyHeWei阅读 10,430评论 10 10
  • 男:爱情里面,有什么是需要特别注意的吗? 女:不要让女人轻易流泪。 男:为什么? 女:因为女人的眼泪就是脑子里的水...
    乔同学ACG阅读 475评论 0 1
  • 文/北方阿盟 陕西的天安静了许久之后,似乎没有和任何人打招呼,便在清晨哭哭啼啼起来,算起来,已是好几天了。也不知是...
    某书11111阅读 435评论 0 0
  • 每一个客户的背后都隐藏着一大批潜在的客户群,而一个优秀的销售人员百分之七十的业绩来自于老客户。 她来自遥远的冰城哈...
    鱼团长阅读 224评论 0 0
  • 【书香陪伴Day88】玩的小球:红色(red)、绿色(green)、黄色(yellow)、蓝色(blue)。 继续...
    心灵一隅阅读 71评论 0 0