iOS7删除相机照片

作者: 塔塔简 | 来源:发表于2016-07-01 15:56 被阅读174次

                             取巧方式删除iOS7照片

    1. 苹果在iOS8之前访问照片图库,主要是ALAssetsLibrary,可是这个库暴露的API没有直接删除照片的接口,网上可行方法是:[alasset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)],不过这个方法只能删除自身创建的图片,也就是alasset.isEditable = YES ,而该属性确实一个只读属性,如图1

    图1

    那不是App自身创建的照片,比如用户自己相机拍的照片如何删除呢?网上找了好久也没找到有私有API可以调用,即便有,也不好过苹果审核这一关。真的没有办法了吗? 

    百度魔拍可以删除相机照片

    咦?它是这么做到的呢?上IDA看看图2,也是调用上面方法,莫非它的‘isEditable’真有魔法?

    图2

    原来它用Category重写了这个方法 图3:

    图3

    [alasset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)]

    看来‘setImageData’ 方法会先调用Alasset.isEditable 方法,然后执行setImageData操作,设置个断点看看,图4,果然

    图4

    2.原理知道了就好办了,ALAsset新建一个Category,上代码

    #import "ALAsset+Delete.h"

    @implementation ALAsset (Delete)

    -(BOOL)isEditable{

    return YES;

    }@end

    3.上面的方法在8.3固件后彻底失效,需要用Photos.framework(8.0固件引入的新framework) 里面提供的删除方法,这里上一份iOS8,9批量删除照片的代码:

    PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:assetURLs options:nil];

    if (result.count > 0)

    {

    NSMutableArray *toDeleteAssets = [NSMutableArray new];

    for (PHAsset *asset in result) {

    [toDeleteAssets addObject: asset];

    }

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^

    {

    [PHAssetChangeRequest deleteAssets:toDeleteAssets];

    }

    completionHandler:^(BOOL success, NSError *error)

    {

    if ((!success) && (error != nil))

    {

    NSLog(@"Error deleting asset: %@", [error description]);

    }

    }];

    }

    代码段没格式化好,见谅哈,俺得熟悉下Markdown😍

    有疑问到我微信公众号留言

    ![MineWeiXin.png](https://img.haomeiwen.com/i2137046/16b23595991cc783.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

        本文标题:iOS7删除相机照片

        本文链接:https://www.haomeiwen.com/subject/wfgfjttx.html