Photos中常用類(獲取展示功能相關)簡介

簡介

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內容
    PHAssetPHAsssetChangeRequest定義了一些用于編輯照片或者視頻內容的方法,同時允許將編輯后的圖片保存到圖庫中。為了可以讓用戶可以在前次修改的基礎上再次修改,或者是在不同的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請求的對象。

這個類包含了兩個屬性:predicatesortDescriptors

  • 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;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 相冊適配 前言 由于在iOS8及以后蘋果將原有的操作相冊的ALAssetsLibrary framework替換為...
    wentianen閱讀 1,847評論 0 6
  • 寫在前面 在手機APP日益增加的前提下,如何更好的提升用戶的交互體驗似乎成為衡量一個APP重要指標。上述的感悟源于...
    Jack_lin閱讀 6,266評論 12 62
  • 在微博上出現了越來越多的被標記為 Live 的圖片,這種圖片是一種動圖 LivePhoto,長按之后會進行播放。那...
    wvqusrtg閱讀 5,003評論 0 9
  • 一、獲取單張圖片 1、利用UIImagePickerController可以從系統自帶的App中獲得圖片2、設置代...
    白極翁閱讀 7,118評論 0 9
  • 5點半自然醒來,貝貝也起來了,她摟著我,傷心地說家長出題的作業忘了做。我幫她出好題,開始靜心,剛開始就被打斷,貝...
    JC賈閱讀 244評論 1 0