/*
一、 Photos框架:主要操作--------增删查改
1.PHAsset: 一个PHAsset对象就代表着一个图片或者视频
1> 查:[PHAsset fetchAssets...]
2> 增删改: PHAssetChangeRequest (所有跟图片/视频相关的改动)
2.PHAssetCollection:一个PHAssetCollection对象代表一个相册
1> 查: [PHAssetCollection fetchAsset...]
2> 增删改: PHAssetCollectionChangeRequest (所有跟相册相关的改动)
二、须知
1.对相册还是图片、视频的任何【增删改】操作,都必须在performChanges或者 performChangesAndWait的block里执行,不然会报错,
例如:
'This method can only be called from inside of -[PHPhotoLibrary performChanges:completionHandler:] or -[PHPhotoLibrary performChangesAndWait:error:]'
三、具体的保存步骤如下
// 1.保存到相册【相机胶卷】
__block NSString *assetID = nil;
NSError *error = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;
} error:&error];
if (error) return nil;
// 2.获取刚才保存的相片
PHFetchResult<PHAsset *> *createAssets = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil];
//3.获取相册
PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
// 相册的名字,一般都是获取软件的名字
NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleNameKey];
// 查找当前app对应的相册
__block PHAssetCollection *createdCollection = nil;
for (PHAssetCollection *collection in collections) {
//当前app对应的相册已经存在
if([collection.localizedTitle isEqualToString:title]){
createdCollection = collection;
}
}
// 当前app对应的相册不存在,创建一个相册
// 同步执行修改操作
NSError *error = nil;
__block NSString *ID = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
// 创建相册的唯一标识
ID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;
} error:&error];
if (error) return nil;
// 根据唯一标识抓取到相册
createdCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[ID] options:nil].lastObject;
// 4.保存图片到自定义相册
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];
//最后添加的图片放在最前面
[request insertAssets:createAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];
} error:&error];