9

我正在开发一个 Iphone 应用程序,我可以使用 Assetslibrary 枚举资产并将它们加载到表格视图中。用户可以在应用程序中删除一行(图片/视频),但如何直接从我的应用程序更新 Iphone 相册?否则在刷新时,tableview 将重新加载之前删除的资产。

4

5 回答 5

15

在 ios8 中可以使用照片框架删除照片

请查看照片框架的文档

如需删除资产,请参阅 PHAssetChangeRequest

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

where是要删除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 所说,这现在可以在 iOS 8 中使用 Photos 服务。其实挺干净的。您需要向照片库提交更改请求。这是一个例子。

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

确保您已导入照片,并获得用户的授权。(您可能已经这样做了以显示图像)

PHAssetchangeRequest - deleteAssets https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteaassets PHPhotoLibrary 类 - authorizationStatus https://developer.apple.com/documentation/photos/phphotolibrary/1620745-authorizationstatus

于 2015-01-19T08:54:38.203 回答
1

它迟到了,但对其他用户来说会有所帮助。
我们知道只有照片应用程序可以删除图像。在这种情况下,我通过 alassets 从照片中检索所有图像,在自定义图库中查看它们,让用户可以选择从资产中选择多个图像以将它们保存在电话目录中。接下来我使用我的应用程序库而不是照片库。我已经在应用程序中提供了选项,可以随时在应用程序中将图像从照片导入应用程序库(这是图像的文档目录文件夹)。

于 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?
}

结果是这样的:

ScreenShot Remover 示例代码结果

于 2016-08-03T19:02:27.737 回答
0

https://stackoverflow.com/a/11058934/300292的可能重复。简单的答案:你不能。照片应用程序是唯一可以删除资产的地方。这可能是一件好事——你不希望任何任性的应用程序都能够删除你所有的照片,对吗?

于 2012-08-26T02:41:55.613 回答