アプリに読み込まれている画像をから削除する方法はありUIImagePickerControllerますか?
ユーザーが特定のアクションを実行したときに、ユーザーのフォトライブラリから画像を削除できるようにしたい。
ライブラリから画像を選択するようにユーザーに促しています。画像がアプリに読み込まれ、その時点でアプリはぎこちないアニメーションを実行し、実際に画像を削除します。
助けてください!
アプリに読み込まれている画像をから削除する方法はありUIImagePickerControllerますか?
ユーザーが特定のアクションを実行したときに、ユーザーのフォトライブラリから画像を削除できるようにしたい。
ライブラリから画像を選択するようにユーザーに促しています。画像がアプリに読み込まれ、その時点でアプリはぎこちないアニメーションを実行し、実際に画像を削除します。
助けてください!
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がすでに削除されていることがわかります。
はい、写真を削除できます。PHAssetChangeRequestこの操作に使用できます。
Appleから:
写真ライブラリの変更ブロックで使用するための、写真アセットのコンテンツの作成、削除、メタデータの変更、または編集のリクエスト。
class func deleteAssets(_ assets: NSFastEnumeration)
ここで、assets:削除するPHAssetオブジェクトの配列。
PHAssetChangeRequest.deleteAssets([assetToDelete])
したがって、上記のコードを使用してアセットを削除できます。
以下はswift3コードです。
PHPhotoLibrary.shared().performChanges({
let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: imageUrls as! [URL], options: nil)
PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
}, completionHandler: {success, error in
print(success ? "Success" : error )
})