ユーザーのフォトライブラリから写真を削除しますか?
-
24-09-2019 - |
質問
UIImagePickerController
から私のアプリにロードされ、私は、画像を削除することができます方法はありますか?
私は、ユーザーが特定のアクションを実行する際、ユーザーのフォトライブラリから画像を削除することができるようにしたい。
私は、それはアプリがいくつかshnazzyアニメーションを行い、その時点で私のアプリにロードされる、自分のライブラリから画像を選択するようユーザーに促すのです、そして、実際に画像を削除します。
助けてください!
解決
はい、私たちは写真を削除することができます。私たちは、この操作に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 )
})
他のヒント
Appleは実際にあなたがAPIを介して、フォトライブラリから削除することはできません。ユーザーが実際に写真アプリに移動し、手動で自分自身をそれを削除する必要があります。 Appleはあなたがフォトライブラリに書き込むことができない:
ユーザーのに静止画像を保存するには、保存された写真アルバム、使用 UIImageWriteToSavedPhotosAlbum 関数。にムービーを保存するには ユーザーの保存された写真アルバム、使用 UISaveVideoAtPathToSavedPhotosAlbum 機能ます。
しかし、既存の写真を上書き/削除や編集のために、Appleは今そのようなものを持っていません。
実際には、あなたが(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を見つけるには、すでに削除されています。