有没有一种方法可以从 UIImagePickerController
中删除已加载到我的应用程序中的图像?
我希望能够在用户执行特定操作时从用户的照片库中删除该图像。
我提示用户从他们的库中选择图像,然后将其加载到我的应用程序中,在此时应用程序执行一些酷炫的动画,然后实际上删除该图像。
请帮忙!
有没有一种方法可以从 UIImagePickerController
中删除已加载到我的应用程序中的图像?
我希望能够在用户执行特定操作时从用户的照片库中删除该图像。
我提示用户从他们的库中选择图像,然后将其加载到我的应用程序中,在此时应用程序执行一些酷炫的动画,然后实际上删除该图像。
请帮忙!
苹果实际上不允许您通过API从照片库中删除内容。用户必须去“照片”应用程序并手动删除它们。苹果确实允许您向照片库中写入:
要将静止图像保存到用户的“已保存照片”相册中,请使用UIImageWriteToSavedPhotosAlbum函数。要将电影保存到用户的“已保存照片”相册中,请使用UISaveVideoAtPathToSavedPhotosAlbum函数。
但是,苹果现在没有类似于删除和编辑/覆盖现有照片的功能。
实际上,你可以通过使用UIImageWriteToSavedPhotosAlbum API调用将应用程序保存的照片删除(保存到照片库中)。
已记录的API [ALAsset setImageData:metadata:completionBlock:]
是可行的。
1)将图像“photo.jpg”添加到项目中
2)将图像保存到资产库:
ALAssetsLibrary *lib = [ALAssetsLibrary new];
UIImage *image = [UIImage imageNamed:@"photo.jpg"];
[lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"Write image %@ to asset library. (Error %@)", assetURL, error);
}];
3). 进入默认相册,您将在“已保存照片”相册中找到photo.jpg。
4). 从媒体库中删除此图像:
ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
if(asset.isEditable) {
[asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error);
}];
}
}];
} failureBlock:^(NSError *error) {
}];
5). 前往默认相册,你会发现photo.jpg已被删除。
是的,我们可以删除一张照片。我们可以使用PHAssetChangeRequest
来进行此操作。
来自Apple:
用于创建、删除、更改元数据或编辑Photos资源内容的请求,用于在照片库更改块中使用。
class func deleteAssets(_ assets: NSFastEnumeration)
assets是一个PHAsset对象的数组,用于删除。
PHAssetChangeRequest.deleteAssets([assetToDelete])
那么,您可以使用上述代码来删除资产。
下面是 Swift 3 代码:
PHPhotoLibrary.shared().performChanges({
let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: imageUrls as! [URL], options: nil)
PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
}, completionHandler: {success, error in
print(success ? "Success" : error )
})