Delete an asset (picture or video) from IPhone in IOS

扶醉桌前 提交于 2019-12-03 03:00:35
rsswtmr

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?

Ted

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

Matt Reed

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

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.

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:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!