我正在开发一个 Iphone 应用程序,我可以使用 Assetslibrary 枚举资产并将它们加载到表格视图中。用户可以在应用程序中删除一行(图片/视频),但如何直接从我的应用程序更新 Iphone 相册?否则在刷新时,tableview 将重新加载之前删除的资产。
5 回答
在 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
正如 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
它迟到了,但对其他用户来说会有所帮助。
我们知道只有照片应用程序可以删除图像。在这种情况下,我通过 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的可能重复。简单的答案:你不能。照片应用程序是唯一可以删除资产的地方。这可能是一件好事——你不希望任何任性的应用程序都能够删除你所有的照片,对吗?