1.请求访问权限 2.保存图片到默认相册 3.新建自定义相册,首先进行判断是否有相册 4.将默认相册中保存的图片进行引用到自定义相册中.async
若是只是保存图片到默认相册,3,4能够不作.fetch
- (IBAction)save { PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus]; // 请求\检查访问权限 : // 若是用户尚未作出选择,会自动弹框,用户对弹框作出选择后,才会调用block // 若是以前已经作过选择,会直接执行block [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ if (status == PHAuthorizationStatusDenied) { // 用户拒绝当前App访问相册 if (oldStatus != PHAuthorizationStatusNotDetermined) { XMGLog(@"提醒用户打开开关") } } else if (status == PHAuthorizationStatusAuthorized) { // 用户容许当前App访问相册 [self saveImageIntoAlbum]; } else if (status == PHAuthorizationStatusRestricted) { // 没法访问相册 [SVProgressHUD showErrorWithStatus:@"因系统缘由,没法访问相册!"]; } }); }]; }
//保存图片到默认相册spa
- (PHFetchResult<PHAsset *> *)createdAssets { NSError *error = nil; __block NSString *assetID = nil; // 保存图片到【相机胶卷】 [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier; } error:&error]; if (error) return nil; // 获取刚才保存的相片 return [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil]; }
/** * 保存图片到相册 */ - (void)saveImageIntoAlbum { // 得到相片 PHFetchResult<PHAsset *> *createdAssets = self.createdAssets; if (createdAssets == nil) { [SVProgressHUD showErrorWithStatus:@"保存图片失败!"]; return; } // 得到相册 PHAssetCollection *createdCollection = self.createdCollection; if (createdCollection == nil) { [SVProgressHUD showErrorWithStatus:@"建立或者获取相册失败!"]; return; } // 添加刚才保存的图片到【自定义相册】 NSError *error = nil; [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection]; [request insertAssets:createdAssets atIndexes:[NSIndexSet indexSetWithIndex:0]]; } error:&error]; // 最后的判断 if (error) { [SVProgressHUD showErrorWithStatus:@"保存图片失败!"]; } else { [SVProgressHUD showSuccessWithStatus:@"保存图片成功!"]; } }
#pragma mark - 得到当前App对应的自定义相册 - (PHAssetCollection *)createdCollection { // 得到软件名字 NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleNameKey]; // 抓取全部的自定义相册 PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; // 查找当前App对应的自定义相册 for (PHAssetCollection *collection in collections) { if ([collection.localizedTitle isEqualToString:title]) { return collection; } } /** 当前App对应的自定义相册没有被建立过 **/ // 建立一个【自定义相册】 NSError *error = nil; __block NSString *createdCollectionID = nil; [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ createdCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier; } error:&error]; if (error) return nil; // 根据惟一标识得到刚才建立的相册 return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createdCollectionID] options:nil].firstObject; }