代码中怎么新建一个相簿?

本文介绍了一种在iOS设备上创建自定义相册并将图片保存到该相册的方法。通过使用ALAssetsLibrary,可以实现图片的保存,并且能够指定图片所属的相册名称。此外,还提供了一个解决方案来解决保存二维码图片时显示全黑的问题。

转载自:http://www.cocoachina.com/bbs/read.php?tid=143383

我的创建相册代码:

- (void)saveToAlbumWithMetadata:(NSDictionary*)metadata
                      imageData:(NSData*)imageData
                customAlbumName:(NSString*)customAlbumName
                completionBlock:(void(^)(void))completionBlock
                   failureBlock:(void(^)(NSError*error))failureBlock
{
    
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    void(^AddAsset)(ALAssetsLibrary *, NSURL*) = ^(ALAssetsLibrary *assetsLibrary, NSURL*assetURL) {
        [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL*stop) {
                if([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:customAlbumName]) {
                    [group addAsset:asset];
                    if(completionBlock) {
                        completionBlock();
                    }
                }
            } failureBlock:^(NSError*error) {
                if(failureBlock) {
                    failureBlock(error);
                }
            }];
        } failureBlock:^(NSError*error) {
            if(failureBlock) {
                failureBlock(error);
            }
        }];
    };
    [assetsLibrary writeImageDataToSavedPhotosAlbum:imageData metadata:metadata completionBlock:^(NSURL*assetURL, NSError*error) {
        if(customAlbumName) {
            [assetsLibrary addAssetsGroupAlbumWithName:customAlbumName resultBlock:^(ALAssetsGroup *group) {
                if(group) {
                    [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
                        [group addAsset:asset];
                        if(completionBlock) {
                            completionBlock();
                        }
                    } failureBlock:^(NSError*error) {
                        if(failureBlock) {
                            failureBlock(error);
                        }
                    }];
                }else{
                    AddAsset(assetsLibrary, assetURL);
                }
            } failureBlock:^(NSError*error) {
                AddAsset(assetsLibrary, assetURL);
            }];
        }else{
            if(completionBlock) {
                completionBlock();
            }
        }
    }];
     
}
 
- (void)saveImage:(UIImage*)image{
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
    NSMutableArray*groups=[[NSMutableArrayalloc]init];
    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL*stop)
    {
        if(group)
        {
            [groups addObject:group];
        }
        else
        {
            BOOLhaveHDRGroup = NO;
             
            for(ALAssetsGroup *gp in groups)
            {
                NSString*name =[gp valueForProperty:ALAssetsGroupPropertyName];
                 
                if([name isEqualToString:@"Flickr墙纸"])
                {
                    haveHDRGroup = YES;
                }
            }
             
            if(!haveHDRGroup)
            {
                //do add a group named "HDR"
                [assetsLibrary addAssetsGroupAlbumWithName:@"Flickr墙纸"
                                               resultBlock:^(ALAssetsGroup *group)
                 {
                     [groups addObject:group];
                      
                 }
                                              failureBlock:nil];
                haveHDRGroup = YES;
            }
        }
         
    };
    //创建相簿
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:listGroupBlock failureBlock:nil];
     
//在我的"扫一扫"代码中,生成的二维码图片存到新创建的相薄后显示全黑,后同事指点原来是下边红色方法的问题,后换了个方法实现了:

UIImageJPEGRepresentation(image,1)

    [selfsaveToAlbumWithMetadata:nilimageData:UIImagePNGRepresentation(image) customAlbumName:@"Flickr墙纸"completionBlock:^
    {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"保存成功"message:@"若想马上启用该墙纸,请进入图库找到该墙纸并设置为墙纸即可,感谢您的使用。"delegate:nilcancelButtonTitle:@"好"otherButtonTitles: nil];
        [alert show];
         
    } failureBlock:^(NSError*error)
    {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"保存失败"message:error.description delegate:nilcancelButtonTitle:@"知道了"otherButtonTitles: nil];
        [alert show];

//chenyong 下面这个方法可判断是否是因为用户拒绝访问地址所致 我测试了下,如果是中文环境返回 的是“用户拒绝访问
if (([myerror.localizedDescription rangeOfString:@"User denied access"].location!=NSNotFound )|| ([myerror.localizedDescription rangeOfString:@"用户拒绝访问"].location!=NSNotFound))
    }];
     
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值