1.查詢相冊(cè)使用權(quán)限
PHAuthorizationStatus st = [PHPhotoLibrary authorizationStatus];
if (PHAuthorizationStatusDenied == st || PHAuthorizationStatusRestricted == st) {
NSLog(@"相冊(cè)不允許訪問");
}
if (PHAuthorizationStatusAuthorized == st || PHAuthorizationStatusNotDetermined == st) {
NSLog(@"相冊(cè)允許訪問or用戶未選擇");
}
//相冊(cè)變更
[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
//回調(diào)方法如下,不過這個(gè)地方是有一個(gè)坑的抛姑,就是這個(gè)回調(diào)是在一個(gè)子線程里面聂喇,如果你想要對(duì)UI進(jìn)行操作的話氮采,則必須回調(diào)主線程
//相冊(cè)變化回調(diào)
- (void)photoLibraryDidChange:(PHChange *)changeInstance {
dispatch_sync(dispatch_get_main_queue(), ^{
// your codes
});
}
2.創(chuàng)建自己的相冊(cè)
[[PHPhotoLibrary sharedPhotoLibrary]performChanges:^{
[PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"相冊(cè)名字"];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
}];
3.獲取自己創(chuàng)建的相冊(cè)
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil];
PHAssetCollection *collection = nil;
for (PHAssetCollection *accc in userAlbums) {
if ([accc.localizedTitle isEqualToString:@"相冊(cè)名字"]) {
collection = accc;
}
}
4.保存圖片到自己相冊(cè) —-刪除指定相片類似
- (void)addCustomAsset:(UIImage *)image
collection:(PHAssetCollection *)collection
completionHandler:(void (^)(void))successBlock
failture:(void (^)(NSString * _Nonnull))failtureBlock
{
//執(zhí)行變化請(qǐng)求
[self.photoLibaray performChanges:^{
//如果相冊(cè)允許操作
if([collection canPerformEditOperation:PHCollectionEditOperationAddContent]){
//創(chuàng)建資源請(qǐng)求對(duì)象
PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
//創(chuàng)建相冊(cè)請(qǐng)求對(duì)象
PHAssetCollectionChangeRequest * groupChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
//向相冊(cè)中添加資源慢逾。要?jiǎng)h除相片肥橙,換個(gè)方法即可
[groupChangeRequest addAssets:@[assetChangeRequest.placeholderForCreatedAsset]];
}
}completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success == YES)//成功 {
successBlock();return;
}
//失敗
failtureBlock(error.localizedDescription);
}];
}
5.保存視頻到自己相冊(cè)
- (void)addCustomAsset2:(NSURL *)url
collection:(PHAssetCollection *)collection
completionHandler:(void (^)(void))successBlock
failture:(void (^)(NSString * _Nonnull))failtureBlock {
//執(zhí)行變化請(qǐng)求
[self.photoLibaray performChanges:^{
//如果相冊(cè)允許操作
if([collection canPerformEditOperation:PHCollectionEditOperationAddContent]){
//創(chuàng)建資源請(qǐng)求對(duì)象
PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
//創(chuàng)建相冊(cè)請(qǐng)求對(duì)象
PHAssetCollectionChangeRequest * groupChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
//向相冊(cè)中添加資源
[groupChangeRequest addAssets:@[assetChangeRequest.placeholderForCreatedAsset]];
}
}completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success == true)//成功 {
successBlock();return;
}
//失敗
failtureBlock(error.localizedDescription);
}];
}
6.保存圖片/視頻到相機(jī)膠卷
UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
//圖片保存回調(diào)
- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
NSLog(@"保存成功與否提示");
}
//錄像保存完畢
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo {
NSLog(@"保存成功與否提示");
}
7.獲取自己相冊(cè)的圖片
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
//按創(chuàng)建日期排序,最新在前面
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//篩選圖片摸恍,只要圖片赶诊。只要視頻mediaType=2
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType=1"];
//collection 可以從前面方法獲取到
PHFetchResult *albumsPic = [PHAsset fetchAssetsInAssetCollection:collection options:fetchOptions];
//獲取第二張圖
PHAsset *asset = albumsPic[1];
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
//可以設(shè)置options,獲取到圖片的質(zhì)量
// PHImageRequestOptions *options = [PHImageRequestOptions new];
// options.version = PHImageRequestOptionsVersionCurrent;
// options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
// options.resizeMode = PHImageRequestOptionsResizeModeFast;
[imageManager requestImageForAsset:asset
targetSize:AssetGridThumbnailSize
contentMode:PHImageContentModeDefault
options:nil//options
resultHandler:^(UIImage *result, NSDictionary *info) {
self.imageView.image = result;
}];
8.獲取膠卷所以圖片/視頻/音頻
PHFetchOptions *options = [[PHFetchOptions alloc] init];
/// 按創(chuàng)建日期排序
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//獲取膠卷所有圖片逸贾。要獲取視頻陨仅,把類型改為PHAssetMediaTypeVideo津滞,音頻的為PHAssetMediaTypeAudio
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:options];
//枚舉里面的內(nèi)容
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAsset *asset = (PHAsset *)obj;
}];
9.只能相冊(cè)獲取
//獲取所有智能相冊(cè)
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
[smartAlbums enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
NSLog(@"相冊(cè)名字:%@", collection.localizedTitle);
}];
//智能相冊(cè)的title不出意外都是英文,下面提供一個(gè)對(duì)應(yīng)的中文名
- (NSString *)transformAblumTitle:(NSString *)title
{
if ([title isEqualToString:@"Slo-mo"]) {
return @"慢動(dòng)作";
} else if ([title isEqualToString:@"Recently Added"]) {
return @"最近添加";
} else if ([title isEqualToString:@"Favorites"]) {
return @"最愛";
} else if ([title isEqualToString:@"Recently Deleted"]) {
return @"最近刪除";
} else if ([title isEqualToString:@"Videos"]) {
return @"視頻";
} else if ([title isEqualToString:@"All Photos"]) {
return @"所有照片";
} else if ([title isEqualToString:@"Selfies"]) {
return @"自拍";
} else if ([title isEqualToString:@"Screenshots"]) {
return @"屏幕快照";
} else if ([title isEqualToString:@"Camera Roll"]) {
return @"相機(jī)膠卷";
}
return nil;
}