保存图片到自定义相册

#import

#import

在头文件中声明这两个方法

/** 当前App对应的自定义相册 */

- (PHAssetCollection *)createdCollection;

/** 返回刚才保存到【相机胶卷】的图片 */

- (PHFetchResult *)createdAssets;

//点击保存按钮时

- (IBAction)save {

    PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus];


    // 请求检查访问权限 :

    // 如果用户还没有做出选择,会自动弹框,用户对弹框做出选择后,才会调用block

    // 如果之前已经做过选择,会直接执行block

    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

        dispatch_async(dispatch_get_main_queue(), ^{

            if (status == PHAuthorizationStatusDenied) { // 用户拒绝当前App访问相册

                if (oldStatus != PHAuthorizationStatusNotDetermined) {

                    XMGLog(@"提醒用户打开开关")

                }

            } else if (status == PHAuthorizationStatusAuthorized) { // 用户允许当前App访问相册

                [self saveImageIntoAlbum];

            } else if (status == PHAuthorizationStatusRestricted) { // 无法访问相册

                [SVProgressHUD showErrorWithStatus:@"因系统原因,无法访问相册!"];

            }

        });

    }];

}


/** * 保存图片到相册 */

- (void)saveImageIntoAlbum{ 

 // 获得相片

 PHFetchResult *createdAssets = self.createdAssets;

    if (createdAssets == nil) {

        [SVProgressHUD showErrorWithStatus:@"保存图片失败!"];

        return;

    }


    // 获得相册

    PHAssetCollection *createdCollection = self.createdCollection;

    if (createdCollection == nil) {

        [SVProgressHUD showErrorWithStatus:@"创建或者获取相册失败!"];

        return;

    }


    // 添加刚才保存的图片到【自定义相册】

    NSError *error = nil;

    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

        PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];

        [request insertAssets:createdAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];

    } error:&error];


    // 最后的判断

    if (error) {

        [SVProgressHUD showErrorWithStatus:@"保存图片失败!"];

    } else {

        [SVProgressHUD showSuccessWithStatus:@"保存图片成功!"];

    }

}

/** 当前App对应的自定义相册 */

- (PHAssetCollection *)createdCollection{ 

 // 获得软件名字 

 NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleNameKey];

 // 抓取所有的自定义相册

 PHFetchResult *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];


    // 查找当前App对应的自定义相册

    for (PHAssetCollection *collection in collections) {

        if ([collection.localizedTitle isEqualToString:title]) {

            return collection;

        }

    }


    /** 当前App对应的自定义相册没有被创建过 **/

    // 创建一个【自定义相册】

    NSError *error = nil;

    __block NSString *createdCollectionID = nil;

    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

        createdCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;

    } error:&error];


    if (error) return nil;


    // 根据唯一标识获得刚才创建的相册

    return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createdCollectionID] options:nil].firstObject;

}

/** 返回刚才保存到【相机胶卷】的图片 */

- (PHFetchResult *)createdAssets

{

    NSError *error = nil;

    __block NSString *assetID = nil;


    // 保存图片到【相机胶卷】

    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

        assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;

    } error:&error];


    if (error) return nil;


    // 获取刚才保存的相片

    return [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil];

}

你可能感兴趣的:(保存图片到自定义相册)