Delete an asset (picture or video) from IPhone in

2019-03-19 07:26发布

I am working on an Iphone app and I can enumerate assets using the Assetslibrary and load them into a table view. The user can delete a row (a picture / video) in the app but how do I UPDATE the Iphone photo album directly from my app? Otherwise on refreshing, the tableview will reload the previously deleted asset.

5条回答
叼着烟拽天下
2楼-- · 2019-03-19 07:58

As Ted said, this is now possible in iOS 8 using the Photos service. It's pretty clean actually. You need to submit a change request to the photolibrary. Here's an example.

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

Make sure you've imported Photos, and gotten authorization from the user. (Which you probably did to show the image already)

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

查看更多
男人必须洒脱
3楼-- · 2019-03-19 08:04

It late but for other users it will help.
As we know only the photos app can delete images. In such situation, i retrieved all images from photos via alassets, viewed them in custom gallery, given user a option to select multiple images from assets to save them in phone directory. Next i am using my app gallery instead of photos gallery. I have given the option in the app to import images from photos to app gallery (which is a document directory folder of images) at any time in the app.

查看更多
▲ chillily
4楼-- · 2019-03-19 08:04

Adding an answer to an old question here, because we are often asked for Screenshot prevention as part of a Data-Loss-Prevention (DLP) solution. You can (a) register for screenshot notifications and (b) ask the user to delete when it occurs, but there's no way to do it silently or secretly. Here's a full working code example:

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

The result is this:

ScreenShot Remover Sample Code Result

查看更多
你好瞎i
5楼-- · 2019-03-19 08:09

Possible duplication of https://stackoverflow.com/a/11058934/300292. Simple answer: you can't. The Photos app is the only place you can delete assets. Which is probably a good thing--you wouldn't want any willy-nilly app to be able to delete all your photos, would you?

查看更多
爷、活的狠高调
6楼-- · 2019-03-19 08:11

in ios8 deleting photos is possible using the Photos Framework

Please check the documentation of Photos Framework

For deleting assets refer to PHAssetChangeRequest

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

where assets is an array of PHAsset objects to be deleted.

+

For deleting collections refer to PHAssetCollectionChangeRequest

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

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

查看更多
登录 后发表回答