質問

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を見つけるには、すでに削除されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top