PHAsset
- 靜態(tài)資源類(詳情)
PHAssetCreationRequest
- 靜態(tài)資源處理類(增刪改查,創(chuàng)建)
PHAssetCollection
- 相冊文件夾類(相冊)
PHAssetCollectionChangeRequest
- 相冊文件夾處理類(增刪改查,創(chuàng)建)
PHImageManager
- 圖片管理類(將靜態(tài)資源轉(zhuǎn)成圖片)(requestImageForAsset)
詳情類可以通過fetch獲取到系統(tǒng)相冊里的相關資源,包裝的請求類可以對齊進行增刪改查創(chuàng)建,圖片管理類可以獲取到圖片對象
所有的修改移動圖片操作都要在[[PHPhotoLibrary sharedPhotoLibrary] performChanges:]方法中執(zhí)行
獲取資源方法
// 獲取到所有的靜態(tài)資源
PHFetchResult<PHAsset *> * assets=[PHAsset fetchAssetsWithOptions:nil];
for (PHAsset* asset in assets) {
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(80, 80) contentMode:PHImageContentModeDefault options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
NSLog(@"%@",result);
}];
}
// 獲取到所有的相冊文件夾
PHFetchResult<PHAssetCollection *> * collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHCollection* collection in collections) {
NSLog(@"%@",collection.localizedTitle);
}
// 獲取到相機膠卷目錄
PHAssetCollection *cameraRoll = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil].firstObject;
NSLog(@"%@",cameraRoll.localizedTitle);
保存圖片
//保存按鈕事件
- (IBAction)savePic:(UIButton *)sender {
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch (status) {
case PHAuthorizationStatusDenied:
NSLog(@"授權(quán)拒絕");
break;
case PHAuthorizationStatusRestricted:
NSLog(@"系統(tǒng)原因?qū)е聼o法授權(quán)相冊");
case PHAuthorizationStatusNotDetermined:{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
[self saveImgToCustomPic];
}];
}
break;
case PHAuthorizationStatusAuthorized:{
[self saveImgToCustomPic];
}
break;
default:
break;
}
}
/** 把相機膠卷里的圖片保存到自定義相冊里*/
- (void)saveImgToCustomPic
{
__block NSString *assetId = nil;
[SVProgressHUD setBackgroundColor:[UIColor blackColor]];
[SVProgressHUD setForegroundColor:[UIColor whiteColor]];
phpLibraryHandler(^{
// 創(chuàng)建一個靜態(tài)資源處理對象 (會自動保存圖片到相機膠卷)
assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:_imageView.image].placeholderForCreatedAsset.localIdentifier;
},^(BOOL success, NSError * _Nullable error) {
if (!success) {
[SVProgressHUD showErrorWithStatus:@"保存失敗"];
return ;
}
PHAssetCollection *createdCollection = [self getPHAssetCollection];
phpLibraryHandler(^{
// 根據(jù)相片標識獲取到相片對象
PHAsset *assets = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].lastObject;
// 獲取到已創(chuàng)建相冊的請求處理對象
PHAssetCollectionChangeRequest *collectionRequest =[PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];
// 給相冊添加相片資源
[collectionRequest addAssets:@[assets]];
}, ^(BOOL success, NSError * _Nullable error) {
if (!success) {
[SVProgressHUD showErrorWithStatus:@"保存失敗"];
return ;
}
[SVProgressHUD showSuccessWithStatus:@"保存成功"];
});
});
}
/**返回相冊對象*/
- (PHAssetCollection*)getPHAssetCollection
{
PHFetchResult<PHAssetCollection *> * collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection* collection in collections) {
if ([collection.localizedTitle isEqualToString:libraryName]) {
return collection;
}
}
__block NSString *collerctionId = nil;
// 同步執(zhí)行相冊創(chuàng)建方法
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
collerctionId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:libraryName].placeholderForCreatedAssetCollection.localIdentifier;
} error:nil];
return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[collerctionId] options:nil].lastObject;
}
獲取相冊下的所有靜態(tài)資源
// 獲取到所有的相冊文件夾
PHFetchResult<PHAssetCollection *> * collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection* collection in collections) {
// 獲取到每個相冊
NSLog(@"%@",collection.localizedTitle);
// 獲取到該相冊下的所有靜態(tài)資源
PHFetchResult<PHAsset *> * assets = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
for (PHAsset* asset in assets) {
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(80, 80) contentMode:PHImageContentModeDefault options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
NSLog(@"%@",result);
}];
}
}