PHAsset
- 靜態(tài)資源類(lèi)(詳情)
PHAssetCreationRequest
- 靜態(tài)資源處理類(lèi)(增刪改查,創(chuàng)建)
PHAssetCollection
- 相冊(cè)文件夾類(lèi)(相冊(cè))
PHAssetCollectionChangeRequest
- 相冊(cè)文件夾處理類(lèi)(增刪改查,創(chuàng)建)
PHImageManager
- 圖片管理類(lèi)(將靜態(tài)資源轉(zhuǎn)成圖片)(requestImageForAsset)
詳情類(lèi)可以通過(guò)fetch獲取到系統(tǒng)相冊(cè)里的相關(guān)資源,包裝的請(qǐng)求類(lèi)可以對(duì)齊進(jìn)行增刪改查創(chuàng)建,圖片管理類(lèi)可以獲取到圖片對(duì)象
所有的修改移動(dò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);
}];
}
// 獲取到所有的相冊(cè)文件夾
PHFetchResult<PHAssetCollection *> * collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHCollection* collection in collections) {
NSLog(@"%@",collection.localizedTitle);
}
// 獲取到相機(jī)膠卷目錄
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(wú)法授權(quán)相冊(cè)");
case PHAuthorizationStatusNotDetermined:{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
[self saveImgToCustomPic];
}];
}
break;
case PHAuthorizationStatusAuthorized:{
[self saveImgToCustomPic];
}
break;
default:
break;
}
}
/** 把相機(jī)膠卷里的圖片保存到自定義相冊(cè)里*/
- (void)saveImgToCustomPic
{
__block NSString *assetId = nil;
[SVProgressHUD setBackgroundColor:[UIColor blackColor]];
[SVProgressHUD setForegroundColor:[UIColor whiteColor]];
phpLibraryHandler(^{
// 創(chuàng)建一個(gè)靜態(tài)資源處理對(duì)象 (會(huì)自動(dòng)保存圖片到相機(jī)膠卷)
assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:_imageView.image].placeholderForCreatedAsset.localIdentifier;
},^(BOOL success, NSError * _Nullable error) {
if (!success) {
[SVProgressHUD showErrorWithStatus:@"保存失敗"];
return ;
}
PHAssetCollection *createdCollection = [self getPHAssetCollection];
phpLibraryHandler(^{
// 根據(jù)相片標(biāo)識(shí)獲取到相片對(duì)象
PHAsset *assets = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].lastObject;
// 獲取到已創(chuàng)建相冊(cè)的請(qǐng)求處理對(duì)象
PHAssetCollectionChangeRequest *collectionRequest =[PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];
// 給相冊(cè)添加相片資源
[collectionRequest addAssets:@[assets]];
}, ^(BOOL success, NSError * _Nullable error) {
if (!success) {
[SVProgressHUD showErrorWithStatus:@"保存失敗"];
return ;
}
[SVProgressHUD showSuccessWithStatus:@"保存成功"];
});
});
}
/**返回相冊(cè)對(duì)象*/
- (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í)行相冊(cè)創(chuàng)建方法
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
collerctionId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:libraryName].placeholderForCreatedAssetCollection.localIdentifier;
} error:nil];
return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[collerctionId] options:nil].lastObject;
}
獲取相冊(cè)下的所有靜態(tài)資源
// 獲取到所有的相冊(cè)文件夾
PHFetchResult<PHAssetCollection *> * collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection* collection in collections) {
// 獲取到每個(gè)相冊(cè)
NSLog(@"%@",collection.localizedTitle);
// 獲取到該相冊(cè)下的所有靜態(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);
}];
}
}