簡介
Photos framework是iOS8蘋果提供的新的圖片框架,能直接獲取圖片和視頻,包括iCloud上面的圖庫。使用這個框架可以獲取assets來展示和回放,編輯圖片或者視頻內容,或者使用系統相冊、時刻、和分享到iCloud的相冊來進行相關操作,本文側重相片的獲取與保存。
demo地址在這里
新特性與一些概念
獲取實體&改變請求:
Photos framework中的三個model類:PHAsset
,PHAssetCollection
,PHCollectionList
,分別對應三個類型的實體:asset
(圖片和視頻),assets
集合(相冊和時刻),集合列表(相冊文件夾或者moment clusters)。這些對象,也成為 相片實體(photo entities),只包含元數據,同時也是read-only
屬性。改變觀察機制:
使用這個特性能夠在其他app、設備更改了圖片和視頻內容或者相冊的時候通知你的app,在實現觀察機制前需要用PHPhotoLibrary
對象先為你獲取到的照片實體注冊一個觀察者支持手機中的照片app的特性
使用PHCollectionList
類查找獲取照片中響應的時刻層級asset,使用PHAsset
標記連拍照片,全景照片和高分辨率視頻等。當開啟iCloud圖庫后,Photo framework能從iCloud中獲取到使用相同apple ID登陸的不同設備中的照片。加載緩存asset和縮略圖
使用PHImageManager
請求asset中的特定尺寸的圖片或者通過AV Foundation 對象獲取video asset。Photos frame會根據設定自動下載,緩存,以便于高效復用。對于大量的assets的快速執行,例如在生成相冊中所有圖片的縮略圖時,使用PHCachingImageManager
的子類來實現。編輯asset內容
PHAsset
和PHAsssetChangeRequest
定義了一些用于編輯照片或者視頻內容的方法,同時允許將編輯后的圖片保存到圖庫中。為了可以讓用戶可以在前次修改的基礎上再次修改,或者是在不同的app上進行多次修改,Photos保存了當前和縣區版本的asset,如果單獨使用PHAdjustMnentData
對象只能獲取到最后編輯的照片。如果你的app支持在前面修改基礎上多次編輯,你應該允許用戶撤回或者修改本次編輯。
framework中的類
PHAdjustmentData
當修改了一個asset后,Photos會將PHAdjustmentData
對象和修改過的圖片或者視頻數據一起保存起來,你可以通過這個對象提供的一些數據來修改已經保存的編輯。
當需要調整data的時候,調用
- (PHContentEditingInputRequestID)requestContentEditingInputWithOptions:(PHContentEditingInputRequestOptions *)options
completionHandler:(void (^)(PHContentEditingInput *contentEditingInput, NSDictionary *info))completionHandler
初始化方法:
/**
* 用于標記特定的修改數據,使用formatIndentifier和formatVersion指定唯一的adjustment,
* data存儲用于回滾到之前狀態的數據,也就是當前圖片的修改數據,以便于在這個基礎上繼續進行修改
*
* @param formatIndentifier 用于標記 adjustment data
* @param formatVersion version number for adjustment data
* @param data 包含了重新修改需要的數據
*
*/
- (instanceType)initWithForamtIndentifier:(NSString *)formatIndentifier
formatVersion:(NSString *)formatVersion
data:(NSData *)data;
PHAssetChangeRequest
在圖庫中使用PHAssetChangeRequest
對象來創建,修改,刪除PHAsset
對象。
可以使用適當的類方法來實現增加刪除修改asset的目的:
/**
* 刪除給定的assets
*
* @param assets 包含需要刪除的asset數組
*/
+ (void)deleteAssets:(id<NSFastEnumeration>)assets;
/**
* 修改給定的PHAsset對象
*
* 在修改之前使用 'canPerformEditOperation:' 方法判斷asset是否允許修改
* 在photo library change block中創建修改請求后,設置正確的修改請求屬性。
*
* @param asset 待修改的asset
*/
+ (instancetype)changeRequestForAsset:(PHAsset *)asset;
PHFetchOptions
當你使用沒方法獲取PHAsset
(圖片和視頻),PHCollection
(相冊類型),PHAssetCollection
(相冊)的實體(相當于包含多個數據的模型)使用PHFetchOptions
對象指定操作,例如獲取的實體的排列屬性等。
調用PHFetchRequest
類方法創建一個包含fetch請求的對象。
這個類包含了兩個屬性:predicate
和sortDescriptors
。
- NSPredicate *predicate:
specifies which properties to select results by and that also specifies any constraints on selection.
用于指定返回的結果和指定條件
示例:
PHFetchOperation *fetchOptions = [PHFetchOption new];
fetchOperations.predicate = [NSPredicate predicateWithFormat:
@"(mediaSubtype & %d) != 0 || (mediaSubtype & %d) != 0",
PHAssetMediaSubtypePhotoPanorama,PHAssetMediaSubtypeVideoHightFrameRate];
PHFetchResult *result = [PHAsset fetchAssetWithOptions:fetchOptions];
- NSArray <NSSortDescriptor *> *sortDescriptors
用于指定獲取的對象的順序
用一個例子實現以時間順序倒序(剛拍攝的照片放在前頭排列獲取圖片的功能:
PHFetchOption *option = [PHFetchOption new];
option.sourtDescriptors = @[NSSortDescriptors sortDescriptiorWithKey:@"creationDate" ascending:NO];
PHFetchResult *result = [PHAsset fetchAssetsWithOptions:option];
其他幾個屬性:
//用于確定app是否接收到了具體的改變信息。
@property(nonatomic, assign) BOOL wantsIncrementalChangeDetails
/**
*限制檢索獲取得到的photo實體的最小數量,當實體數量十分巨大時,作用顯著,
*例如,用'PHAsset'的'fetchAssetsWithOptions:'方法獲取最近拍攝的照片等。
*/
@property(nonatomic, assign, readwrite) NSUInteger fetchLimit
//檢索結果是否包含連拍圖片,如果是NO,只顯示用戶選取的那種圖片,如果為YES,
@property(nonatomic, assign) BOOL includeAllBurstAssets
//顧名思義,是否檢索隱藏的圖片
@property(nonatomic, assign) BOOL includeHiddenAssets
/**
*包含的數據類型:
*PHAssetSourceTypeUserLibrary
*PHAssetSourceTypeCloudShared
*PHAssetSourceTypeiTunesSynced
*/
@property(nonatomic, assign) PHAssetSourceType includeAssetSourceTypes
PHImageRequestOption
PHImageRequestOption 用于配置從PHImageManager中獲取asset的請求。
常用的一些屬性和方法有:
/**
* @discuss 如果是NO,表示為異步操作,從manager中請求圖片時,
* 'reqeustImageForAssets:targetSize:options:resultHandler'方法會立即返回,
* 建議在后臺只在后臺線程中執行同步請求
*/
@property (nonatomic, assign) BOOL synchronous;
/**
*typedef : NSInteger {
PHImageRequestOptionsDeliveryModeOpportunistic = 0,
PHImageRequestOptionsDeliveryModeHighQualityFormat = 1,
PHImageRequestOptionsDeliveryModeFastFormat = 2,
} PHImageRequestOptionsDeliveryMode;
*@PHImageRequestOptionsDeliveryModeOpportunistic:
自動返回一個或多個結果,來平衡圖片的質量和響應性,它會多次調用
resutltHandler:'requestImageForAssets:targetSize:options:resultHandler'.
它首先會先調用一次'resutltHandler'返回清晰度低的圖片作為臨時顯示圖片,
等到能獲取到高清晰度的圖片時再次調用'resutltHandler'返回高質量圖片。
note:如果'synchronous'是NO那么該屬性無效
*@PHImageRequestOptionsDeliveryModeHighQualityFormat
只返回高分辨率的圖片。具有較高的優先權
*@PHImageRequestOptionsDeliveryModeFastFormat
快速返回結果,可能會犧牲圖片質量。
*/
@property (nonatomic, assign) PHImageRequestOptionsDeliveryMode deliveryMode;
/**
* a mode that specifies how to resize the reuqested image
*/
@property(nonatomic, assign) PHImageRequestOptionsResizeMode resizeMode;
從iCloud中下載照片
/**
* 能否從iCloud中下載圖片,
YES,本地也沒有保存此圖片,從iCloud上下載,用'progressHandler'這個block獲取下載進度;
NO,同時本地也沒有圖片,'progressHander'中的info[PHImageReustIsInCloudKey]返回值會表示不能下載
*/
@property(nonatomic, assign, getter=isNetworkAccessAllowed) BOOL networkAccessAllowed;
/**
下載進度block,在多條線程中執行操作,刷新UI時需要回到主線程
*/
typedef void (^ PHAssetImageProgressHandler)(double progress, NSError *error, BOOL *stop, NSDictionary *info);
@property(nonatomic, copy) PHAssetImageProgressHandler progressHandler
PHFetchResult
PHFetchRequest
是有序的photo實體對象的容器,包含通過給定的檢索條件返回的asset,相冊,一個相冊類型中的所有相冊列表(例如,smart album類型下的所有相冊,它是有序的),在PHAsset
,PHCollection
,PHAssetcollection
,PHCollectionList
這幾個類中都包含有相應的類方法包含對應信息的PHFetchRequest
對象,例如:
- PHAsset
/**
* @param mediaType
* aaset類型,包含有:
* PHAssetMediaTypeUnknown = 0,
* PHAssetMediaTypeImage,
* PHAssetMediaTypeVideo,
* PHAssetMediaTypeAudio,
*
* @param options 檢索操作
*
* @return 帶有符合條件的PHAsset對象集合的PHFetchRequest對象
*/
+(PHFetchResult<PHAsset *> *)fetchAssetsWithMeidaType:(PHAssetMediaType)mediaType
options:(PHFetchOptions *)options
- PHCollection (抽象類,不允許直接使用,開發過程中用它的兩個子類PHCollectionList和PHAssetCollection替代)
//Retrieves collections from the root of the photo library’s hierarchy of user-created albums and folders.
+(PHFetchResult<PHCollection *> *)fetchTopLevelUserCollectionsWithOption:(PHFetchOptions *)options;
- PHAssetCollection:
/**
* 獲取自定條件的相冊
*
* @param type 相冊類型:
PHAssetCollectionTypeAlbum
PHAssetCollectionTypeSmartAlbum
PHAssetCollectionTypeMoment
* @param subtype 相對于相冊類型更具體些的相片類型,如全景,照片流等
* @param options 檢索條件
*
* @return 符合條件的相冊
*/
+(PHFetchResult<PHAssetCollection *> *)fetchAssetColletcionsWithType:(PHAssetCollectionType)type
subtype:(PHAssetCollectionSubtype)subtype
options:(PHFetchOptions *)options;
- PHCollectionList:
+(PHFetchResult<PHCollectionList *> *)fetchCollectionListsWithType:(PHCollectionListType)collectionListType
subtype:(PHCollectionListSubtype)subtype
options:(PHFetchOptions *)options
PHFetchRequest雖然包含了符合條件的photo實體的集合,與NSArray不同的是它會動態改變包含的內容,在處理大量的asset的時候效率更高些,實現的效果也好點
常用屬性與方法
//是否包含給定的對象
- (BOOL)containsObject:(ObjectType)anObject
//包含的photo實體個數
@property(readonly) NSUInteger count
//指定類型的asset數量
- (NSUInteger)countOfAssetsWithMediaType:(PHAssetMediaType)mediaType
PHImageManager
PHImageManager有一個單例方法,同時也提供了用于獲取全尺寸圖片,圖片縮略圖等方法.
獲取圖片:
/**
* 會多次調用'resultHandler',第一次調用,返回的圖片清晰度較低,
* 當高清晰度圖片可以獲取時,會再次調用,如果高質量的圖片在緩存匯中,只調用一次'resultHandler'。
* 這個方法默認是異步的,當從后臺線程調用這個方法時,需要將options的'synchronous'設為YES.
*
* @param asset 保存圖片信息的asset
* @param targetSize 返回的圖片尺寸
* @param contentMode 返回的圖片顯示模式
* @param options image request option
* @param resultHandler 返回的內容
*
* @return 請求標示,用于取消請求*/
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset
targetSize:(CGSize)targetSize
contentMode:(PHImageContentMode)contentMode
options:(PHImageRequestOptions *)options
resultHandler:(void (^)(UIImage *result, NSDictionary *info))resultHandler;
/**
* 請求全尺寸的圖片,只執行一次'resultHandler',
* 如果options的'version'被設置為'PHImageRequestOptionsVersionCurrent,'
* 返回在這個asset上發生的任何編輯后的imageData,如果不是的話,返回最原始版本的圖片
*
* @param asset 保存圖片信息的asset
* @param options image request option
* @param resultHandler 返回的內容
*
* @return 請求標示,用于取消請求
*/
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset
options:(PHImageRequestOptions *)options
resultHandler:(void (^)(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info))resultHandler;
取消請求:
- (void)cancelImageRequest:(PHImageRequestID)requestID
PHCachingImageManager
PHCachingImageManager是PHImageManager的子類,如果相冊中有大量的圖片,而你的需求是要快速的獲取這些圖片的縮略圖和大圖數據用于展示,這個時候可以用PHCachingImageManager來實現,它具有緩存機制可以快速獲取一個圖冊的縮略圖,或者在后臺請求全尺寸圖片以便于快速展示。
開始緩存圖片:
/**
* @discuss 當調用這個方法的時候,cacaingManager開始在獲取你所需要的數據,
* 同時在后臺生成縮略圖,之后可以使用'requestImagesFromAssets:targetSize:contentMode:resultHandler:'
* 方法從緩存中請求數據。
* Photos會按照給定的尺寸,顯示模式返回圖片,緩存中的圖片尺寸是固定的
*
* @param assets 需要緩存的assets
* @param targetSize 圖片尺寸
* @param contentMode 顯示模式
* @param options 請求操作
*/
- (void)startCachingImagesForAssets:(NSArray *)assets
targetSize:(CGSize)targetSize
contentMode:(PHImageContentMode)contentMode
options:(PHImageRequestOptions *)options;
取消圖片緩存:
/**
* 當使用collectionView展示圖片縮略圖的時候,如果需要改變尺寸大小的時候,
* 就需要將緩存中的舊圖片刪除重新緩存。
*
* @param assets 需要緩存的assets
* @param targetSize 圖片尺寸
* @param contentMode 顯示模式
* @param options 請求操作
*/
- (void)stopCachingImagesForAssets:(NSArray *)assets
targetSize:(CGSize)targetSize
contentMode:(PHImageContentMode)contentMode
options:(PHImageRequestOptions *)options;
PHPhotoLibrary
PHPhotoLibrary可以看成是一個用戶圖庫,包含了一些的圖片和相冊,同時包含本地的和iCloud中的資源。當Photos app發生圖片的修改、增加、刪除等改變時,使用PHPhotoLibrary來做一些刷新UI,保存數據等響應動作,同時也可以注冊觀察者(使用registerChangeObserver
方法),當Photos app內容發生改變的時,會觸發代理方法photoLibraryDidChange
。
使用PHPhotoLibrary響應圖庫改變
Photos中的PHAsset,PHAssetCollection等是不可變對象,因此要改變當前這些類型對象的時候就需要使用photo library實現改變。
請求改變數據需要用到PHAssetChangeRequest
,PHAssetcCollectionChangeRequest
,PHCollectionListChangeRequest
。
使用步驟:
1、創建實體
每個change request類都提供了用于創建響應的實體類的方法:
creationRequestForAssetCollectionWithTitle:
創建了一個asset Collection
如果要添加一個新的asset到collection中,需要用到change request提供的PHObjectPlaceholder
對象。在change block結束之后,使用placeholder對象提供的localIdentifier
屬性獲取創建好的asset對象。
2、刪除實體
例如:deleCollectionLists
用于刪除collection list
3、修改實體
changeRqeustForAsset
創建了一個可用于修改的asset的change request
下面代碼實現往相冊中添加新圖片的功能:
- (void)addNewAssetWithImge:(UIImage *)image toAlbum:(PHAssetCollection *)album {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *assetChange = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
PHAssetCollectionChangeRequest *collectionChange = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:album];
PHObjectPlaceholder *placeholder = [assetChange placeholderForCreatedAsset];
[collectionChange addAssets:@[placeholder]];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
NSLog(@"Finished adding asset. %@", (success ? @"Success" : error));
}];
}
note:For each call to the performChanges:completionHandler: or performChangesAndWait:error: method, iOS shows an alert asking the user for permission to edit the contents of the photo library.
注冊觀察者
PHPhotoLibraryChangeObserver
在系統圖庫發生變化的時候就會通知指定的觀察者,只要是使用了Photos framework實現的改變,都會觸發觀察者的方法。
registerChangeObserver:
方法指定一名觀察者,當系統圖庫發生改變,會觸發觀察者的指定方法,這個方法在PHPhotoLibraryChangeObserver
協議中:- (void)photoLibraryDidChange:(PHChange *)changeInfo ;
PHCollection
PHCollection是一個抽象類,不允許直接使用它的實例對象,而是使用它的兩個子類:PHAssetCollection
,PHCollectionList
:
PHAssetCollection 包含了帶有圖片或者視頻信息PHAsst對象,PHCollectionList可以看做是一個文件夾,里面存放多個相冊或者是在年度相冊中的所有時刻的照片。
獲取圖片集合:
//用特定的操作從collection list中獲取collection集合
+ (PHFetchResult<PHCollection *>)fetchCollectionsInCollectionList:(PHCollectionList *)collectionList options:(PHFetchOptions *)options
//獲取所有用戶創建的相冊或者文件夾。
+ (PHFetchResult<PHCollection *> *)fetchTopLevelUserCollectionWithOptions:(PHFetchOptions *)options;
PHAssetCollection
一個PHAssetCollection代表一個相冊,可能包含圖片和視頻,例如:時間相冊,我的照片流,自拍。
在Photos framework中不能直接獲取collection中的內容,通過fetchAssetsInAssetCollecton:options:
獲取到包含PHAsset集合的PHFecthReult對象,之后用fetchResult提供的方法取出圖片或者視頻。
獲取asset collection 的方法有許多種:
/**
* @param type 相冊類型:
PHAssetCollectionSubtypeAlbumRegular
Photos APP中創建的相冊
PHAssetCollectionSubtypeAlbumSyncedEvent
從iPhoto中同步的事件相冊
PHAssetCollectionSubtypeAlbumSyncedFaces
從iPhoto中同步的包含人臉的相冊
PHAssetCollectionSubtypeAlbumSyncedAlbum
從iPhoto同步的普通相冊
PHAssetCollectionSubtypeAlbumImported
從其他設備導入的相冊
PHAssetCollectionSubtypeAlbumCloudShared
分享到iCloud的照片流相冊
PHAssetCollectionSubtypeAlbumMyPhotoStream
用戶個人的iCloud照片流
PHAssetCollectionSubtypeSmartAlbumGeneric
沒有特定類型的只能相冊
PHAssetCollectionSubtypeSmartAlbumPanoramas
全景圖片相冊
PHAssetCollectionSubtypeSmartAlbumVideos
視頻相冊
PHAssetCollectionSubtypeSmartAlbumFavorites
個人收藏
PHAssetCollectionSubtypeSmartAlbumTimelapses
延時攝影相冊
PHAssetCollectionSubtypeSmartAlbumAllHidden
隱藏的圖片相冊
PHAssetCollectionSubtypeSmartAlbumRecentlyAdded
最近添加的圖片
PHAssetCollectionSubtypeSmartAlbumBursts
連拍相冊
PHAssetCollectionSubtypeSmartAlbumSlomoVideos
慢動作視頻相冊
PHAssetCollectionSubtypeSmartAlbumUserLibrary
在本地存在的相冊(不包含icloud中的相冊)
PHAssetCollectionSubtypeSmartAlbumSelfPortraits
自拍
PHAssetCollectionSubtypeSmartAlbumScreenshots
截屏
PHAssetCollectionSubtypeAny
獲取所有類型的相冊
* @param options 篩選操作
*
* @return 包含符合條件的相冊的fetch result
*/
+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsWithType:(PHAssetCollectionType)type subtype:(PHAssetCollectionSubtype)subtype options:(nullable PHFetchOptions *)options;
/**
* 獲取符合特定類型同時包含指定asset的相冊集合
*
* @param asset 給定的sset
* @param type 指定相冊類型
* @param options 獲取操作
*
*/
+ (PHFetchResult<PHAssetCollection *> *)fetchAssetCollectionsContainingAsset:(PHAsset *)asset withType:(PHAssetCollectionType)type options:(PHFetchOptions *)options;
PHCollectionList
PHCollectionList包含了更高級別的asset集合,可嵌套PHAssetCollection
和自身類型,還支持多重嵌套,例如獲取時刻相冊和時刻相冊中年度照片等。
獲取collection list的幾種方法:
+ (PHFetchResult<PHCollectionList *>)fetchCollectionListsContainingCollection:(PHCollection *)collection options:(PHFetchOptions *)options;
+ (PHFetchResult<PHCollectionList *> *)fetchCollectionListsContainingCollection:(PHCollection *)collection options:(nullable PHFetchOptions *)options;
+ (PHFetchResult<PHCollectionList *> *)fetchCollectionListsWithLocalIdentifiers:(NSArray<NSString *> *)identifiers options:(nullable PHFetchOptions *)options;
+ (PHFetchResult<PHCollectionList *> *)fetchCollectionListsWithType:(PHCollectionListType)collectionListType subtype:(PHCollectionListSubtype)subtype options:(nullable PHFetchOptions *)options;
+ (PHFetchResult<PHCollectionList *> *)fetchMomentListsWithSubtype:(PHCollectionListSubtype)momentListSubtype containingMoment:(PHAssetCollection *)moment options:(nullable PHFetchOptions *)options;
+ (PHFetchResult<PHCollectionList *> *)fetchMomentListsWithSubtype:(PHCollectionListSubtype)momentListSubtype options:(nullable PHFetchOptions *)options;
PHAsset
PHAsset代表一個視頻或者圖片資源,當需要展示或者修改Photos app中的圖片時需要先獲取asset,asset是不可改變的并且只保存了所代表的視頻或者圖片的metadata。
獲取PHAsset的幾種方法:
//從asset collection中獲取符合條件的asset集合
+ (PHFetchResult <PHAsset *> *)fetchAssetsInAssetCollection:(PHAssetCollection *)assetCollection options:(PHFetchOptions *)options
/**
* 默認返回所有類型的asset,如果要給asset添加更多的類型限定,可以在options的filter predicate中設置。
* @param mediaType :
PHAssetMediaTypeUnknown
未知類型
PHAssetMediaTypeImage
靜態圖片
PHAssetMediaTypeVideo
視頻
PHAssetMediaTypeAudio
音頻
注: PHMediaSubtype:
PHAssetMediaSubtypeNone = 0,
// Photo subtypes
PHAssetMediaSubtypePhotoPanorama = (1UL << 0),
PHAssetMediaSubtypePhotoHDR = (1UL << 1),
PHAssetMediaSubtypePhotoScreenshot NS_AVAILABLE_IOS(9_0) = (1UL << 2),
PHAssetMediaSubtypePhotoLive NS_AVAILABLE_IOS(9_1) = (1UL << 3),
// Video subtypes
PHAssetMediaSubtypeVideoStreamed = (1UL << 16),
PHAssetMediaSubtypeVideoHighFrameRate = (1UL << 17),
PHAssetMediaSubtypeVideoTimelapse = (1UL << 18),
*/
+ (PHFetchResult <PHAsset *> *_Nullable)fetchAssetsWithMediaType:(PHAssetMediaType)mediaType options:(PHFetchOptions *_Nullable)options;
+ (PHFetchResult *<PHAsset *> *)fetchAssetsWithLocalIndentifiers:(NSArray <NSString *>)identifier options:(PHFetchOptions *)options;
/**
* 獲取key asset,每一個collection都至少有一個key asset,每個不同類型的collection用于定義key asset的方式也不同,有的collection中只有一個key asset,有的含有多個。
* 例如在相機膠卷中,最近拍攝的圖片或者視頻就是key asset
*/
+ (PHFetchResult <PHAsset *>)fetchKeyAssetsInAssetCollection:(PHAssetCollection *)collection options:(PHFetchOptions *)options;
/**
* 獲取所有的符合條件的asset,默認條件下,不包含通過iTunes同步過來的和存儲在iCloud中的圖片。
* 更改此條件,配置options的'includeAssetSourceType'屬性來實現。
*/
+ (PHFetchResult <PHAsset *> *)fetchAssetsWithOptions:(PHFetchOptions *)options;
//獲取連拍照片
+ (PHFetchResult <PHAsset *>)fetchAssetWithBurstIdentifier(NSString *)burstIdentifier options:(PHFetchOptions *)options;