9

私はiPhoneアプリに取り組んでおり、Assetslibraryを使用してアセットを列挙し、それらをテーブルビューにロードできます。ユーザーはアプリの行(写真/ビデオ)を削除できますが、iPhoneのフォトアルバムをアプリから直接更新するにはどうすればよいですか?それ以外の場合、更新時に、テーブルビューは以前に削除されたアセットを再読み込みします。

4

5 に答える 5

15

iOS8では、PhotosFrameworkを使用して写真を削除できます

PhotosFrameworkのドキュメントを確認してください

アセットの削除については、PHAssetChangeRequestを参照してください

+ (void)deleteAssets:(id<NSFastEnumeration>)assets

ここで、は削除するオブジェクトassetsの配列です。PHAsset

+

コレクションの削除については、PHAssetCollectionChangeRequestを参照してください。

+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets
https://developer.apple.com/documentation/photos/phassetcollectionchangerequest/1619453-deleteassetcollections

于 2014-06-23T09:46:45.303 に答える
11

Tedが言ったように、これはiOS8でPhotosサービスを使用して可能になりました。実はかなりきれいです。フォトライブラリに変更リクエストを送信する必要があります。これが例です。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest deleteAssets:arrayOfPHAssets];
} completionHandler:^(BOOL success, NSError *error) {
    NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error));
}];

写真をインポートし、ユーザーから承認を得ていることを確認してください。(おそらく、すでに画像を表示するために行ったものです)

PHAssetchangeRequest-deleteAssetshttps : //developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassetsPHPhotoLibraryクラス -authorizationStatushttps: //developer.apple.com/documentation/photos/phphotolibrary/1620745-authorizationstatus

于 2015-01-19T08:54:38.203 に答える
1

遅くなりますが、他のユーザーにとっては役に立ちます。
私たちが知っているように、写真アプリだけが画像を削除できます。このような状況では、アラセットを介して写真からすべての画像を取得し、カスタムギャラリーで表示し、アセットから複数の画像を選択して電話帳に保存するオプションをユーザーに提供しました。次に、写真ギャラリーの代わりにアプリギャラリーを使用しています。アプリ内でいつでも写真からアプリギャラリー(画像のドキュメントディレクトリフォルダー)に画像をインポートするオプションをアプリに指定しました。

于 2013-05-23T11:21:03.513 に答える
1

データ損失防止(DLP)ソリューションの一部としてスクリーンショット防止を求められることが多いため、ここに古い質問への回答を追加します。(a)スクリーンショット通知に登録し、(b)発生時に削除するようにユーザーに依頼することはできますが、黙ってまたは密かに行う方法はありません。完全に機能するコード例を次に示します。

func applicationDidBecomeActive(application: UIApplication) {
    registerForScreenShotNotifications()
}

func registerForScreenShotNotifications() {
   NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationUserDidTakeScreenshotNotification, object: nil, queue: NSOperationQueue.mainQueue()) { (notification) in
        print("Yep they took a screenshot \(notification)")

        let assetToDelete = self.getLastImage()
        if  let assetToDelete = assetToDelete
        {
            PHPhotoLibrary.sharedPhotoLibrary().performChanges({
                PHAssetChangeRequest.deleteAssets([assetToDelete])
                }, completionHandler: { (success, error) in
                    print("Success \(success) - Error \(error)")
            })

        }
    }
}

// NOTE : You should ask for permission to access photos before this
func getLastImage() -> PHAsset? {
    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: true) ]
    let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions)
    let newestAsset = fetchResult.lastObject

    return newestAsset as! PHAsset?
}

結果は次のとおりです。

ScreenShotRemoverサンプルコードの結果

于 2016-08-03T19:02:27.737 に答える
0

https://stackoverflow.com/a/11058934/300292の重複の可能性。簡単な答え:できません。写真アプリは、アセットを削除できる唯一の場所です。これはおそらく良いことです。意地悪なアプリですべての写真を削除できるようにしたくないのではないでしょうか。

于 2012-08-26T02:41:55.613 に答える