保存图片到自定义相册文件夹中,实现处理相册被用户误删的情况

  • 保存图片,思路分析:
    • 1>首先自定义一个保存图片的文件夹
    • 2>然后判断文件是否创建成功,如果创建成功则直接保存图片(先把图片保存到【相册胶卷】中,在保存到自定义相册文件夹中)。
    • 3>假如文件创建失败,即文件已经存在。那么遍历相册中的所有文件,当找到以前创建的文件夹,保存图片。如果遍历完所有文件,依然没找到自定义的文件夹,则表示此文件夹被用户误删了,则特殊处理文件夹名(一般在文件夹名后加一个空格),重写创建一个文件夹,再保存图片,这样创建出来的文件夹名在相册中外观上和以前的一样,因为苹果系统会自动忽略文件名前后的空格。 */
#import <SVProgressHUD.h>

@interface LSLSeeBigPictureViewController ()
  @property(nonatomic,weak)UIImageView *imageView;
  /** 图片文件 */
  @property(nonatomic,strong)ALAssetsLibrary *library;
@end


@implementation LSLSeeBigPictureViewController
#pragma mark - 懒加载
- (ALAssetsLibrary *)library
{
    if (!_library) {
        _library = [[ALAssetsLibrary alloc] init];
    }
    return _library;
}
#pragma mark - 保存图片
static NSString * const LSLDefaultGroupName = @"龙少相册";
static NSString * const LSLGroupNameKey = @"LSLGroupNameKey";
// 从沙盒中获取相册文件名
- (NSString *)getGropName
{
    NSString *groupName = [[NSUserDefaults standardUserDefaults] stringForKey:LSLGroupNameKey];
    if (groupName == nil) {
        groupName = LSLDefaultGroupName;

        // 把文件名保存到沙盒中
        [[NSUserDefaults standardUserDefaults] setObject:groupName forKey:LSLGroupNameKey];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    return groupName;
}

// 保存图片
- (IBAction)save:(id)sender {
    // 获得文件夹的名字
    __block NSString *groupName = [self getGropName];

    __weak ALAssetsLibrary *weakLibrary = self.library;

    __weak typeof(self) weakSelf = self;
    // 1.先参加一个文件
    [weakLibrary addAssetsGroupAlbumWithName:groupName resultBlock:^(ALAssetsGroup *group) {
        if (group) {  // 2.创建文件成功
            // 保存图片到文件夹中
            [weakSelf saveImageToGroup:group];
        }else{  // 3.文件夹已经存在
            // 遍历所有文件夹
            [weakLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                NSString *name = [group valueForProperty:ALAssetsGroupPropertyName];
                if ([name isEqualToString:groupName]) { // 是自己创建的文件夹
                    // 保存图片到文件夹中
                    [weakSelf saveImageToGroup:group];
                    *stop = YES;
                }else if( [name isEqualToString:@"Camera Roll"]){   //  根据遍历的规律,一般先遍历用户创建的文件夹最后遍历系统自带的文件夹“Camera Roll”和“null”即删除文件夹。当判断走到这里的时候,如果文件夹名等于@"Camera Roll"那么表示,系统默认相册文件夹被用户删除了,需重写创建。
                    // 系统默认文件夹被用户删除
                    groupName = [groupName stringByAppendingString:@" "];

                    // 把文件名保存到沙盒中
                    [[NSUserDefaults standardUserDefaults] setObject:groupName forKey:LSLGroupNameKey];
                    [[NSUserDefaults standardUserDefaults] synchronize];

                    // 创建图片文件夹
                    [weakLibrary addAssetsGroupAlbumWithName:groupName resultBlock:^(ALAssetsGroup *group) {
                        // 保存图片
                        [weakSelf saveImageToGroup:group];
                    } failureBlock:nil];
                }
            } failureBlock:nil];
        }
    } failureBlock:nil];
}

// 保存图片到相册中
- (void)saveImageToGroup:(ALAssetsGroup *)group
{
   __weak ALAssetsLibrary *weakLibrary = self.library;

    // 先把图片保存到【相册胶卷】中
    [weakLibrary writeImageToSavedPhotosAlbum:self.imageView.image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
        // 再把图片保存到对于的文件中
        [weakLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            [group addAsset:asset];
            [SVProgressHUD showSuccessWithStatus:@"保存图片成功"];
        } failureBlock:nil];
    }];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值