【发布时间】:2012-08-26 01:30:17
【问题描述】:
我正在开发一个 Iphone 应用程序,我可以使用 Assetslibrary 枚举资产并将它们加载到表格视图中。用户可以在应用程序中删除一行(图片/视频),但如何直接从我的应用程序更新 Iphone 相册?否则刷新时,tableview 将重新加载之前删除的资产。
【问题讨论】:
标签: ios tableview assets alassetslibrary
我正在开发一个 Iphone 应用程序,我可以使用 Assetslibrary 枚举资产并将它们加载到表格视图中。用户可以在应用程序中删除一行(图片/视频),但如何直接从我的应用程序更新 Iphone 相册?否则刷新时,tableview 将重新加载之前删除的资产。
【问题讨论】:
标签: ios tableview assets alassetslibrary
在 ios8 中可以使用照片框架删除照片
请查看 Photos Framework 的文档
要删除资产,请参阅 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
【讨论】:
正如 Ted 所说,这现在可以在 iOS 8 中使用照片服务。其实挺干净的。您需要向照片库提交更改请求。这是一个例子。
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
[PHAssetChangeRequest deleteAssets:arrayOfPHAssets];
} completionHandler:^(BOOL success, NSError *error) {
NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error));
}];
确保您已导入照片并获得用户授权。 (您可能已经展示了图像)
PHAssetchangeRequest - 删除资产 https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets PHPhotoLibrary 类 - 授权状态 https://developer.apple.com/documentation/photos/phphotolibrary/1620745-authorizationstatus
【讨论】:
晚了,但对其他用户会有所帮助。
我们知道只有照片应用程序可以删除图像。在这种情况下,我通过 alassets 从照片中检索所有图像,在自定义图库中查看它们,让用户可以选择从资产中选择多个图像以将它们保存在电话目录中。接下来我使用我的应用程序库而不是照片库。我已经在应用程序中提供了选项,可以随时在应用程序中将图像从照片导入应用程序库(这是图像的文档目录文件夹)。
【讨论】:
在此处添加一个老问题的答案,因为我们经常被要求将屏幕截图保护作为数据丢失预防 (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?
}
结果是这样的:
【讨论】:
https://stackoverflow.com/a/11058934/300292 可能重复。简单的答案:你不能。照片应用程序是唯一可以删除资产的地方。这可能是件好事——您不希望任何任性的应用程序都能够删除您的所有照片,对吗?
【讨论】: