2010-01-31 102 views
10

有没有一种方法可以删除从UIImagePickerController加载到我的应用程序的图像?从用户的照片库中删除照片?

我希望能够在用户执行特定操作时从用户的照片库中删除图像。

我提示用户从他们的库中选择一个图像,然后将其加载到我的应用程序中,此时应用程序会执行一些动画,然后实际删除图像。

请帮忙!

回答

15

Apple实际上并不允许您通过API从照片库中删除。用户必须切实转到照片应用并自行将其手动删除。苹果确实允许你写的照片库:

静止图像保存到用户的 保存的照片相册,使用 UIImageWriteToSavedPhotosAlbum 功能。要将电影保存到 用户的“保存的照片”相册,请使用 UISaveVideoAtPathToSavedPhotosAlbum 函数。

但是,对于删除和编辑/覆盖现有的照片,苹果公司目前没有类似的东西。

+0

我们不能要求使用照片框架的缺失?我想,是的,我们可以。 – 2017-11-21 11:17:30

+0

PHAssetChangeRequest.deleteAssets([assetToDelete]) – 2017-11-21 11:18:27

+0

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deteteassets – 2017-11-21 11:18:45

10

实际上,您可以删除您的应用程序保存的照片(使用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已被删除。

+0

它工作:)。但是,setImageData:metaData:completionBlock函数用于替换图像,而不是根据Apple文档将其删除。你确定AppStore没有问题吗? – Sukhrob 2014-04-21 08:09:40

+1

我已经在苹果商店有一个应用程序,这是一个公共API,在应用程序审查过程中没有问题。 – evanchin 2014-04-25 04:01:01

+0

这也适用于我。谢谢! – 2014-11-19 10:54:50

0

是的,我们可以删除一张照片。我们可以使用PHAssetChangeRequest进行此操作。

从苹果:

创建,删除,修改元数据,或编辑照片资产的内容,在照片库中的变化块使用的要求。

class func deleteAssets(_ assets: NSFastEnumeration) 

其中资产: 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) 
     })