PhotoKit -- 那些年的那些坑

背景

近期在做一些圖片及視頻處理方面的工作,順便把遇到的關(guān)于photokit 的一些坑及需要注意的地方記錄下來,如能給道友一針定是極好的.此文篇幅較小非教學內(nèi)容,如有相關(guān)需求有大量資源.

1. localIdentifier

1.1 Photos 框架中的基類 PHObject 只有一個公開接口 localIdentifier,是對象唯一唯一標志符. 
    PHObject 實現(xiàn)了 -isEqual 和 -hash 方法.可以直接使用這個屬性進行對比是否同一個對象.

2. PHImageManager

2.1 PHImageManager 在框架中是個單例對象,它提供了加載圖片和視頻的方法.
    默認情況下听怕,這些API是異步執(zhí)行.在播放視頻時需要注意回主線程后再進行播放.

2.2 resizeMode 默認是 None,這也造成了返回圖像尺寸與要求尺寸不符.
    要返回一個指定尺寸的圖像需要避免兩層陷阱:一定要指定 options 參數(shù),resizeMode 不能為 None.

    synchronous: 指定請求是否同步執(zhí)行.
    resizeMode: 對請求的圖像怎樣縮放. 有三種選擇:
        None: 不縮放;
        Fast: 盡快地提供接近或稍微大于要求的尺寸;
        Exact: 精準提供要求的尺寸;
    deliveryMode: 圖像質(zhì)量. 有三種值: 
        Opportunistic: 在速度與質(zhì)量中均衡; 
        HighQualityFormat: 不管花費多長時間,提供高質(zhì)量圖像;
        FastFormat: 以最快速度提供好的質(zhì)量(在 synchronous 為 true 時有效). 
      
2.3 synchronous 為 NO 狀態(tài)下 resultHandler 會被多次調(diào)用,
    即先返回較低質(zhì)量,再返回較高質(zhì)量, YES 狀態(tài)則直接返回要求圖片.

2.4 通過 requestAVAssetForVideo: options: resultHandler: 方法獲取視頻資源或信息,
    返回的 AVAsset 對象不一定都為 AVURLAsset,有可能為其他類型(例: AVComposition 等).

3. iCloud

3.1 PHImageResultIsInCloudKey: 圖像是否必須從 iCloud 請求,這個有巨坑.
    獲取圖像時可通過此 key 對其'位置'進行區(qū)分,即原圖是否在本地.

    而獲取視頻時,當 networkAccessAllowed = NO 時(YES 暫未親測),是不能使用這個 key 判斷的.
    雖然蘋果在9.0以上為 PHAsset 這個類增加了 sourceType 這個屬性,我們能獲取資源來源,
    但是,依舊不是也不能通過這個屬性獲取到視頻是否在本地,本人暫時通過 urlAsset.URL 進行判斷.但是!但是!視頻可以正常播放不代表本地視頻是完整的.

    同時9.0也新增了 PHAssetResourceManager 這個類用來獲取媒體資源,有興趣可以進行了解.

4. PHPhotoLibrary

4.1 在photoLibraryDidChange(changeInfo: PHChange!)的實現(xiàn)里將所有處理放在主線程里處理;

4.2 所有 PHPhotoLibrary 的觀察者都會收到通知,不管觀察者本身引用的內(nèi)容是否發(fā)生變化,因此要根據(jù)觀察者的情況來對通知進行過濾.
    從參數(shù) PHChange 對象里能獲得所有的變化,通過 changeDetailsForObject: 和 changeDetailsForFetchResult: 來獲取細節(jié).
    changeDetailsForObject: 獲取的細節(jié)只是 PHObject 子類對象本身的信息變化,包括是否有成員被刪除以及是否有圖像或視頻發(fā)生變化兩種信息,有用信息實在有限,要處理成員變化需要依靠后者;
    對一個 PHFetchResult 對象使用 changeDetailsForFetchResult: 獲取的細節(jié)中只包含該 PHFetchResult 對象變化的信息,可以利用這點來對通知進行過濾處理。

4.3 通過 changeDetailsForFetchResult: 獲取的 PHFetchResultChangeDetails 對象,包含了 FetchResult 的結(jié)果的所有變化情況以及 FetchResult 的成員變化前后的數(shù)據(jù),需要注意的是成員變化的通知坏逢。
IMG_0097.JPG

就到這里吧,如有疑問或建議歡迎道友們補充交流.如需要源碼請評論...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贝咙,一起剝皮案震驚了整個濱河市崎页,隨后出現(xiàn)的幾起案子捣卤,更是在濱河造成了極大的恐慌异逐,老刑警劉巖捶索,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灰瞻,死亡現(xiàn)場離奇詭異,居然都是意外死亡酝润,警方通過查閱死者的電腦和手機燎竖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門要销,熙熙樓的掌柜王于貴愁眉苦臉地迎上來构回,“玉大人,你說我怎么就攤上這事蕉陋【杵荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵凳鬓,是天一觀的道長茁肠。 經(jīng)常有香客問我,道長缩举,這世上最難降的妖魔是什么垦梆? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮仅孩,結(jié)果婚禮上托猩,老公的妹妹穿的比我還像新娘。我一直安慰自己辽慕,他們只是感情好京腥,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溅蛉,像睡著了一般公浪。 火紅的嫁衣襯著肌膚如雪他宛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天欠气,我揣著相機與錄音厅各,去河邊找鬼。 笑死预柒,一個胖子當著我的面吹牛队塘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宜鸯,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼憔古,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顾翼?” 一聲冷哼從身側(cè)響起投放,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奈泪,失蹤者是張志新(化名)和其女友劉穎适贸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涝桅,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡拜姿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冯遂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕊肥。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蛤肌,靈堂內(nèi)的尸體忽然破棺而出壁却,到底是詐尸還是另有隱情,我是刑警寧澤裸准,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布展东,位于F島的核電站,受9級特大地震影響炒俱,放射性物質(zhì)發(fā)生泄漏盐肃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一权悟、第九天 我趴在偏房一處隱蔽的房頂上張望砸王。 院中可真熱鬧,春花似錦峦阁、人聲如沸谦铃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驹闰。三九已至凿跳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疮方,已是汗流浹背控嗜。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骡显,地道東北人疆栏。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像惫谤,于是被迫代替她去往敵國和親壁顶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

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