- 父類:NSObject
提供獲取或生成預覽縮略圖和全尺寸圖片裆悄,或者視頻數(shù)據(jù)的方法。
一、概述
使用這些方法來獲取全尺寸圖片資源或縮略圖但校,或者獲取AV Foundation
對象來播放、輸出啡氢、控制視頻資源状囱。
加載圖片或視頻數(shù)據(jù):
- 使用PHAsset類來獲取你想要的資源。
- 調用
+ (PHImageManager *)defaultManager;
方法來獲取圖片管理單例對象倘是。 - 使用“請求圖片”和“請求視頻對象”中的方法來加載資源的圖片或視頻數(shù)據(jù)亭枷。
圖片管理器會緩存它提供過的圖像和數(shù)據(jù),所以之后向同一個資源請求同樣的參數(shù)會很快速的返回搀崭。
如果你需要同時加載很多資源的圖片數(shù)據(jù)叨粘,如果你想要很快速的加載圖片請使用PHCachingImageManager預加載緩存。例如瘤睹,你在一個展示資源的視圖中想要使用縮略圖填充宣鄙,你可以在滾動到位置之前提前緩沖。
二默蚌、內容
1. 獲得圖片管理器
+ (PHImageManager *)defaultManager;
獲得圖片管理器單例冻晤。
2. 請求圖片
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *__nullable result, NSDictionary *__nullable info))resultHandler;
- asset PHAsset - 要獲取的資源。
- targetSize CGSize - 想要獲取的圖片的大小绸吸。
- contentMode PHImageContentMode - 圖片的大小與縱橫比的關系鼻弧。
- options PHImageRequestOptions - 告訴Photos如何處理請求设江,如何格式化圖片,并且通知你的應用處理過程和錯誤攘轩。
- resultHandler block - 加載完成圖片后被調用叉存。
- result UIImage - 獲取到的圖片
- info NSDictionary - 關于請求狀態(tài)的信息。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值度帮。
獲取給定資源的圖片歼捏。
當你調用這個方法,Photos會加載或生成一個和你給定的大小一樣或接近的圖片笨篷。然后瞳秽,它會調用你的resultHandler
回調來返回這張圖片。為了更快速的反應你的請求率翅,Photos可能會提供一個略大于給定大小的圖片——因為這張圖片可能已經被緩存或者可以更有效率的生成這張圖片练俐。根據(jù)你給定的options
以及資源的當前狀態(tài),Photos可能會從網絡下載這個資源的數(shù)據(jù)冕臭。
默認情況下這個方法是異步執(zhí)行的腺晾。如果你在后臺的線程中調用這個方法,那么你可能需要改變options
參數(shù)中的synchronous
屬性為YES
以阻塞線程辜贵,直到圖片被準備好或者發(fā)生錯誤悯蝉,這個時候Photos會調用你的resultHandler
。
對于一個異步請求托慨,Photos可能會不止一次的調用你的resultHandler
回調泉粉。Photos第一次調用回調會提供一個合適的低質量圖片作為臨時展示,然后它會去準備一個高質量的圖片榴芳。(如果低質量的圖片立刻可以返回嗡靡,那么第一次調用回調可能在方法返回一個返回值之前調用。)當高質量的圖片準備好窟感,Photos會再次調用你的resultHandler
來提供這張圖片讨彼。如果圖片管理器已經緩存了請求的圖片的全質量圖片,Photos只會調用一次你的resultHandler
柿祈。當Photos提供一個臨時的低質量圖片的時候哈误,resultHandler
中的info
參數(shù)中的PHImageResultIsDegradedKey
鍵會標示。
你可以使用這個方法獲取照片和視頻資源——對于一個視頻資源躏嚎,一個圖片請求將提供一個縮略圖或者關鍵幀蜜自。
PHImageContentMode
typedef NS_ENUM(NSInteger, PHImageContentMode) {
PHImageContentModeAspectFit = 0, // 縮放圖像,用更大的尺寸填充給定的目標尺寸卢佣。
PHImageContentModeAspectFill = 1, // 縮放圖像重荠,使其完全填充給定的目標尺寸。
PHImageContentModeDefault = PHImageContentModeAspectFit // 默認虚茶,PHImageContentModeAspectFit
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;
- asset PHAsset - 要獲取的資源戈鲁。
- options PHImageRequestOptions - 告訴Photos如何處理請求校赤,如何格式化圖片氧腰,并且通知你的應用處理過程和錯誤。
- resultHandler block - 加載完成圖片后被調用盟步。
- imageData NSData - 獲取到的圖片數(shù)據(jù)掷匠。
- dataUTI NSString - 請求的圖片烹卒。
- orientation UIImageOrientation - 圖片的想要展示的方向狱掂。
- info NSDictionary - 關于請求狀態(tài)的信息穆刻。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值。
獲取給定資源的全尺寸圖片消约。
當你調用這個方法肠鲫,Photos加載這個圖片資源的最大的表現(xiàn)形式,然后會調用你的resultHandler
回調來提供這個數(shù)據(jù)荆陆。根據(jù)你給定的options
以及資源的當前狀態(tài),Photos可能會從網絡下載這個資源的數(shù)據(jù)集侯。
默認情況下這個方法是異步執(zhí)行的被啼。如果你在后臺的線程中調用這個方法,那么你可能需要改變options
參數(shù)中的synchronous
屬性為YES
以阻塞線程棠枉,直到圖片被準備好或者發(fā)生錯誤浓体,這個時候Photos會調用你的resultHandler
。這個方法忽略deliveryMode
選項——Photos只會調用一次你的resultHandler
辈讶。
如果version
選項被設置為PHImageRequestOptionsVersionCurrent
命浴,Photos將會提供渲染的圖片數(shù)據(jù),包含了所有對資源內容的編輯結果贱除。否則生闲,Photos將會提供資源的最原始圖像。
3. 請求視頻對象
- (PHImageRequestID)requestPlayerItemForVideo:(PHAsset *)asset options:(nullable PHVideoRequestOptions *)options resultHandler:(void (^)(AVPlayerItem *__nullable playerItem, NSDictionary *__nullable info))resultHandler;
- asset PHAsset - 要播放的視頻資源月幌。
- options PHVideoRequestOptions - 告訴Photos如何處理請求碍讯,并且通知你的應用處理過程和錯誤。
- resultHandler block - 加載資源數(shù)據(jù)后被調用扯躺。
- playerItem AVPlayerItem - 獲取到的視頻數(shù)據(jù)捉兴。
- info NSDictionary - 關于請求狀態(tài)的信息。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值录语。
獲取要播放的視頻資源的表現(xiàn)形式倍啥,將被異步加載。
當你調用這個方法澎埠,Photos會下載這個視頻數(shù)據(jù)(如果需要的話)并且創(chuàng)建一個播放項虽缕。然后調用你的resultHandler
回調來提供請求獲取的視頻。
當你想要簡單的播放存在的視頻資源請使用這個方法蒲稳。對于更多的選項詳細信息或者使用資源的音頻和視頻軌道工作彼宠,則使用- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler;
方法鳄虱。
- (PHImageRequestID)requestExportSessionForVideo:(PHAsset *)asset options:(nullable PHVideoRequestOptions *)options exportPreset:(NSString *)exportPreset resultHandler:(void (^)(AVAssetExportSession *__nullable exportSession, NSDictionary *__nullable info))resultHandler;
- asset PHAsset - 將要被創(chuàng)建導出會話的視頻資源。
- options PHVideoRequestOptions - 告訴Photos如何處理請求凭峡,并且通知你的應用處理過程和錯誤拙已。
- exportPreset NSString - 要導出的資源的導出預設名。請查看AVAssetExportSession摧冀。
- resultHandler block - 加載資源數(shù)據(jù)并且準備導出會話后被調用倍踪。
- exportSession AVAssetExportSession - 使用這個將視頻資源數(shù)據(jù)寫入文件
- info NSDictionary - 關于請求狀態(tài)的信息。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值索昂。
獲取一個將視頻資源的數(shù)據(jù)寫入文件的導出會話建车,將被異步加載。
當你調用這個方法椒惨,Photos會下載這個視頻數(shù)據(jù)(如果需要的話)并且創(chuàng)建一個導出會話缤至。然后調用你的resultHandler
回調來提供請求獲取的視頻。
對于額外的導出選項康谆,使用- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info))resultHandler;
方法并且創(chuàng)建AVAssetReader和AVAssetWriter對象來轉換和輸出視頻資源數(shù)據(jù)领斥。
- (PHImageRequestID)requestAVAssetForVideo:(PHAsset *)asset options:(nullable PHVideoRequestOptions *)options resultHandler:(void (^)(AVAsset *__nullable asset, AVAudioMix *__nullable audioMix, NSDictionary *__nullable info))resultHandler;
- asset PHAsset - 將要被加載的視頻資源。
- options PHVideoRequestOptions - 告訴Photos如何處理請求沃暗,并且通知你的應用處理過程和錯誤月洛。
- resultHandler block - 加載資源數(shù)據(jù)后被調用。
- asset AVAsset - 提供了訪問視頻資源軌道和數(shù)據(jù)的對象孽锥。關于AVAsset對象的更詳細內容請查看AVFoundation Programming Guide嚼黔。
- audioMix AVAudioMix - 使用這個對象可以重新排列資源的音頻軌道,編輯在組合中的附加音頻惜辑,或者配置用來輸出資源音頻數(shù)據(jù)的AVAssetReaderOutput對象唬涧。如果這個參數(shù)為
nil
,那么這個資源使用的是默認音頻組合盛撑。 - info NSDictionary - 關于請求狀態(tài)的信息爵卒。查看Image Result Info Keys獲取可能出現(xiàn)的鍵合值。
請求代表了視頻資源內容和狀態(tài)的AV Foundation
對象撵彻,將被異步加載钓株。
當你調用這個方法,Photos會下載這個視頻數(shù)據(jù)(如果需要的話)并且創(chuàng)建一個AV Foundation
對象陌僵。然后調用你的resultHandler
回調來提供請求獲取的視頻轴合。
當你想要使用一個資源內容的音頻和視頻軌道工作請使用這個方法。如果你只想要播放資源碗短,請使用- (PHImageRequestID)requestPlayerItemForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options resultHandler:(void (^)(AVPlayerItem *playerItem, NSDictionary *info))resultHandler;
方法受葛。如果你想要導出資源數(shù)據(jù),請調用- (PHImageRequestID)requestExportSessionForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options exportPreset:(NSString *)exportPreset resultHandler:(void (^)(AVAssetExportSession *exportSession, NSDictionary *info))resultHandler;
方法。
4. 請求Live Photos
- (PHImageRequestID)requestLivePhotoForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHLivePhotoRequestOptions *)options resultHandler:(void (^)(PHLivePhoto *__nullable livePhoto, NSDictionary *__nullable info))resultHandler;
從給定資源中獲取Live Photos总滩。
一張Live Photo是一張圖片纲堵,只有支持的設備才可以拍攝,它包含了捕捉之前和之后時刻的動作和聲音闰渔。就像一個UIImage
對象代表了一張隨時可用的圖片席函,一個PHLivePhoto對象代表了一個準備展示的圖片、聲音冈涧、動作數(shù)據(jù)的Live Photo茂附。使用這個方法獲取資源中的Live Photo,獲取之后Photos會調用你的resultHandler
回調來返回這個Live Photo督弓,你可以使用PHLivePhotoView來展示Live Photo营曼。
注意
當你要展示Live Photo的動作和聲音內容時使用這個方法。如果你只想展示Live Photo資源的靜止圖片——例如愚隧,當在照片選擇界面加載縮略圖來展示時——請使用- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;
方法蒂阱。
當你調用這個方法,Photos會加載或生成一個和你提供的大小相近或相等大小的PHLivePhoto對象狂塘。然后調用你的resultHandler
回調提供這個圖片录煤。為了更快速的反應你的請求,Photos可能會提供一個略大于給定大小的圖片——因為這張圖片可能已經被緩存或者可以更有效率的生成這張圖片睹耐。根據(jù)你給定的options
以及資源的當前狀態(tài)辐赞,Photos可能會從網絡下載這個資源的數(shù)據(jù)部翘。此方法總是異步執(zhí)行硝训。
Photos可能會不止一次的調用你的resultHandler
回調。Photos第一次調用回調會提供一個合適的低質量圖片作為臨時展示新思,然后它會去準備一個高質量的圖片窖梁。(如果低質量的圖片立刻可以返回,那么第一次調用回調可能在方法返回一個返回值之前調用夹囚。)當高質量的圖片準備好纵刘,Photos會再次調用你的resultHandler
來提供這張圖片。如果圖片管理器已經緩存了請求的圖片的全質量圖片荸哟,Photos只會調用一次你的resultHandler
假哎。當Photos提供一個臨時的低質量圖片的時候,resultHandler
中的info
參數(shù)中的PHImageResultIsDegradedKey
鍵會被標示鞍历。
5. 取消一個請求
- (void)cancelImageRequest:(PHImageRequestID)requestID;
取消一個異步請求舵抹。
當你使用- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions *)options resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;
方法執(zhí)行一個異步請求來請求圖片數(shù)據(jù),或者對一個視頻對象使用上面的“請求視頻對象”中的方法劣砍,圖片管理器都會返回一個對應該請求的數(shù)字標識惧蛹。想要在請求完成之前取消,請調用該方法并傳入對應的數(shù)字標識。