利用Photos 框架搭建美圖秀秀相冊(cè)選擇器

簡(jiǎn)介:Photos框架是iOS8.0后推出的一個(gè)新的用于對(duì)系統(tǒng)相冊(cè)進(jìn)行相關(guān)操作的河绽,在iOS8.0之前筝野,開(kāi)發(fā)中只能使用AssetsLibrary框架來(lái)訪問(wèn)移動(dòng)設(shè)備的圖片庫(kù)。本文中不再對(duì)AssetsLibrary做過(guò)多的介紹,僅針對(duì)Photos框架進(jìn)行詳細(xì)介紹。并且以美圖秀秀的照片選擇器作為實(shí)例載體進(jìn)行功能實(shí)現(xiàn)晾虑。

首先要獲取系統(tǒng)的所有相冊(cè),有多個(gè)方法可以選擇

1.該方法通過(guò)唯一標(biāo)識(shí)符identifiers來(lái)獲取相冊(cè) ?PHFetchOptions為將要獲取到了相冊(cè)的相關(guān)屬性對(duì)象

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

2.該方法通過(guò)PHAssetCollectionType 相冊(cè)分類枚舉值獲取相關(guān)相冊(cè)?PHAssetCollectionSubtype?為子類型 即進(jìn)一步想相冊(cè)分類 ?如Album和 AlbumCoundShared組合表示從iTunes同步來(lái)的 并且是從icloud分享來(lái)的相冊(cè)

+ (PHFetchResult *)fetchAssetCollectionsWithType:(PHAssetCollectionType)type subtype:(PHAssetCollectionSubtype)subtype options:(nullable PHFetchOptions *)options;

相關(guān)枚舉值如下

typedef NS_ENUM(NSInteger, PHAssetCollectionType) {

PHAssetCollectionTypeAlbum= 1, //從iTunes同步而來(lái)的及用戶自建的相冊(cè)

PHAssetCollectionTypeSmartAlbum = 2,//相機(jī)拍攝而成的相冊(cè)

PHAssetCollectionTypeMoment= 3,//Photos為我們自動(dòng)生成的時(shí)間分組相冊(cè)

}

enumPHAssetCollectionSubtype : Int {

caseAlbumRegular//用戶在 Photos 中創(chuàng)建的相冊(cè)仅叫,也就是我所謂的邏輯相冊(cè)

caseAlbumSyncedEvent//使用 iTunes 從 Photos 照片庫(kù)或者 iPhoto 照片庫(kù)同步過(guò)來(lái)的事件帜篇。然而,在iTunes 12 以及iOS 9.0 beta4上诫咱,選用該類型沒(méi)法獲取同步的事件相冊(cè)笙隙,而必須使用AlbumSyncedAlbum。

caseAlbumSyncedFaces//使用 iTunes 從 Photos 照片庫(kù)或者 iPhoto 照片庫(kù)同步的人物相冊(cè)遂跟。

caseAlbumSyncedAlbum//做了 AlbumSyncedEvent 應(yīng)該做的事

caseAlbumImported//從相機(jī)或是外部存儲(chǔ)導(dǎo)入的相冊(cè),完全沒(méi)有這方面的使用經(jīng)驗(yàn)婴渡,沒(méi)法驗(yàn)證幻锁。

caseAlbumMyPhotoStream//用戶的 iCloud 照片流

caseAlbumCloudShared//用戶使用 iCloud 共享的相冊(cè)

caseSmartAlbumGeneric//文檔解釋為非特殊類型的相冊(cè),主要包括從 iPhoto 同步過(guò)來(lái)的相冊(cè)边臼。由于本人的 iPhoto 已被 Photos 替代哄尔,無(wú)法驗(yàn)證。不過(guò)柠并,在我的 iPad mini 上是無(wú)法獲取的岭接,而下面類型的相冊(cè),盡管沒(méi)有包含照片或視頻臼予,但能夠獲取到鸣戴。

caseSmartAlbumPanoramas//相機(jī)拍攝的全景照片

caseSmartAlbumVideos//相機(jī)拍攝的視頻

caseSmartAlbumFavorites//收藏文件夾

caseSmartAlbumTimelapses//延時(shí)視頻文件夾,同時(shí)也會(huì)出現(xiàn)在視頻文件夾中

caseSmartAlbumAllHidden//包含隱藏照片或視頻的文件夾

caseSmartAlbumRecentlyAdded//相機(jī)近期拍攝的照片或視頻

caseSmartAlbumBursts//連拍模式拍攝的照片粘拾,在 iPad mini 上按住快門不放就可以了窄锅,但是照片依然沒(méi)有存放在這個(gè)文件夾下,而是在相機(jī)相冊(cè)里缰雇。

caseSmartAlbumSlomoVideos//Slomo 是 slow motion 的縮寫入偷,高速攝影慢動(dòng)作解析,在該模式下械哟,iOS 設(shè)備以120幀拍攝疏之。不過(guò)我的 iPad mini 不支持,沒(méi)法驗(yàn)證暇咆。

caseSmartAlbumUserLibrary//這個(gè)命名最神奇了锋爪,就是相機(jī)相冊(cè)丙曙,所有相機(jī)拍攝的照片或視頻都會(huì)出現(xiàn)在該相冊(cè)中,而且使用其他應(yīng)用保存的照片也會(huì)出現(xiàn)在這里几缭。

caseAny//包含所有類型

}

3.該方法也是通過(guò)相冊(cè)分類進(jìn)行查詢 用法同上

// Smart Albums are not supported, only Albums and Moments

+ (PHFetchResult *)fetchAssetCollectionsContainingAsset:(PHAsset *)asset withType:(PHAssetCollectionType)type options:(nullable PHFetchOptions *)options;

4.該方法通過(guò)管理iOS8.0之前的AssetsLibrary的唯一標(biāo)識(shí)URL

+ (PHFetchResult *)fetchAssetCollectionsWithALAssetGroupURLs:(NSArray *)assetGroupURLs options:(nullable PHFetchOptions *)options;

還有幾個(gè)獲取系統(tǒng)相冊(cè)的方法 ?用法類似 在此不再描述河泳。

獲取相冊(cè)后,我們需要遍歷每一個(gè)相冊(cè)年栓,獲取具體的照片內(nèi)容拆挥,下面將介紹幾個(gè)常用的方法。

首先介紹一下PHFetchResult類某抓,該類實(shí)例對(duì)象既可以表示一個(gè)相冊(cè)集合纸兔,也可以表示具體的照片集合,就像文件夾一樣否副,文件夾下既可以是文件夾汉矿,也可以是具體的文件,因此备禀,我們用它來(lái)描述以上獲取的相冊(cè)集合洲拇,同樣也會(huì)用它描述具體的照片集合。

當(dāng)我們通過(guò)以上方法獲取到相冊(cè)集合后曲尸,應(yīng)當(dāng)遍歷PHFetchResult對(duì)象(類似數(shù)組赋续,操作與數(shù)組相同,只是存儲(chǔ)的數(shù)據(jù)類型為PHAssetCollection對(duì)象)另患,如下獲取某一個(gè)相冊(cè)集合下的具體一個(gè)相冊(cè)(具體相冊(cè)即為照片集合):

PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:(PHAssetCollection對(duì)象) options:nil];

如下方法進(jìn)行了某一個(gè)具體的相冊(cè)查詢纽乱,其中由于當(dāng)前result為相冊(cè)對(duì)象,因此獲取的圖片為相冊(cè)封面照片昆箕,targetSize為目標(biāo)照片的尺寸鸦列,該框架會(huì)提供一張你指定的尺寸照片,以達(dá)到提升性能的目的鹏倘,如果缺省會(huì)返回原尺寸大小的照片(可能會(huì)占用較大內(nèi)存薯嗤,不建議這樣做哦)。PHImageRequestOptions為照片尺寸的拉伸模式纤泵。PHImageRequestOptions參數(shù)為照片的獲取配置应民,如果需要從iCloud下載圖片,可以詳細(xì)配置夕吻,一般使用默認(rèn)配置即可诲锹。回調(diào)block中提供了UIImage對(duì)象和照片信息字典涉馅。

PHFetchResult *assetResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil];

[[PHImageManager defaultManager] requestImageForAsset:assetResult.firstObject targetSize:_coverImgView.frame.size contentMode:PHImageContentModeDefault options:[PHImageRequestOptionsnew] resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

_coverImgView.image = result;

}];

以上即為整體美圖照片選擇器所使用到的Photos框架基本技術(shù)归园,如下為具體的核心代碼。

/*相冊(cè)配置使用默認(rèn)即可*/

PHFetchOptions *fetchOptions = [PHFetchOptionsnew];

/*初始化相冊(cè)數(shù)組*/

_deviceAlumDataArr = [NSMutableArray array];

/* 獲取系統(tǒng)創(chuàng)建的相冊(cè) */

PHFetchResult *smartAlbumFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions];

_allAblubResult = smartAlbumFetchResult;

/*遍歷系統(tǒng)創(chuàng)建相冊(cè)結(jié)果集*/

for(PHAssetCollection *subinsmartAlbumFetchResult) {

PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:sub options:nil];

if(result.count==0) {

continue;

}

/*添加具體相冊(cè)到相冊(cè)數(shù)組*/

[_deviceAlumDataArr addObject:sub];

}

/*獲取所有的用戶創(chuàng)建相冊(cè)*/

PHFetchResult *smartAlbumFetchResult2 = [PHAssetCollection fetchTopLevelUserCollectionsWithOptions:nil];

/*遍歷用戶自建相冊(cè)結(jié)果集*/

for(PHAssetCollection *subinsmartAlbumFetchResult2) {

PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:sub options:nil];

if(result.count==0) {

continue;

}

/*添加具體相冊(cè)到相冊(cè)數(shù)組*/

[_deviceAlumDataArr addObject:sub];

}

效果圖如下:如果有朋友需要源碼稚矿,可以到github上面下載哦庸诱,喜歡的話記得start??:https://github.com/China131/JHM_TShow.git


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捻浦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桥爽,更是在濱河造成了極大的恐慌朱灿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钠四,死亡現(xiàn)場(chǎng)離奇詭異盗扒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)缀去,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門侣灶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缕碎,你說(shuō)我怎么就攤上這事褥影。” “怎么了咏雌?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵凡怎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赊抖,道長(zhǎng)统倒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任熏迹,我火速辦了婚禮檐薯,結(jié)果婚禮上凝赛,老公的妹妹穿的比我還像新娘注暗。我一直安慰自己,他們只是感情好墓猎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布捆昏。 她就那樣靜靜地躺著,像睡著了一般毙沾。 火紅的嫁衣襯著肌膚如雪骗卜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天左胞,我揣著相機(jī)與錄音寇仓,去河邊找鬼。 笑死烤宙,一個(gè)胖子當(dāng)著我的面吹牛遍烦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躺枕,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼服猪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼供填!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起罢猪,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤近她,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后膳帕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體粘捎,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年备闲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晌端。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恬砂,死狀恐怖咧纠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泻骤,我是刑警寧澤漆羔,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站狱掂,受9級(jí)特大地震影響演痒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趋惨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一鸟顺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧器虾,春花似錦讯嫂、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至葛圃,卻和暖如春千扔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背库正。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工曲楚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褥符。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓龙誊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親属瓣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子载迄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容