對(duì)方給我發(fā)一個(gè)圖片,我要保存到本地,IOS的UIKit Framework提供了UIImageWriteToSavedPhotosAlbum方法對(duì)圖像進(jìn)行保存奋岁,該方法會(huì)將image保存至用戶的相冊(cè)中:
上代碼:
void UIImageWriteToSavedPhotosAlbum (
UIImage? *image,
id? ? ? completionTarget,
SEL? ? ? completionSelector,
void? ? *contextInfo
);
參數(shù)說明:
image : 需要保存的圖片對(duì)象
id : 響應(yīng)方法對(duì)象
SEL : 選擇方法
步驟:
/**
*? 將圖片添加到本地相冊(cè)
*/
- (void)addImageViewTolocal{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:_currentItem.imageURL]];
UIImage *myImage = [UIImage imageWithData:data];
[self saveImageToPhotos:myImage];
}
步驟二:
- (void)saveImageToPhotos:(UIImage*)savedImage
{
UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}
步驟三:
- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo
{
NSString *msg = nil ;
if(error != NULL){
msg = @"保存圖片失敗" ;
}else{
msg = @"保存圖片成功" ;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"保存圖片結(jié)果提示"
message:msg
delegate:self
cancelButtonTitle:@"確定"
otherButtonTitles:nil];
[alert show];
}
這樣就可以實(shí)現(xiàn)將圖片保存至本地相冊(cè);
? 今天優(yōu)化上面的方法,只能保存到相冊(cè),而不能保存到指定相冊(cè),
首先需要導(dǎo)入系統(tǒng)的庫(kù):?
創(chuàng)建一個(gè)管理類:
.h
#import#import
@class UIImage;
typedef void (^STAlbumSaveHandler)(UIImage *image, NSError *error);
/** * @brief 將圖片寫入相冊(cè),使用ALAssetLibrary * *?
@param? image? ? 需要寫入的圖片 *?
@param? album? ? 相冊(cè)名稱,如果相冊(cè)不存在弧腥,則新建相冊(cè) *?
@param? completionHandler 回調(diào)?
*/
extern void STImageWriteToPhotosAlbum(UIImage *image, NSString *album, STAlbumSaveHandler completionHandler);
@interface STAlbumManager : NSObject
+ (instancetype)sharedManager;
/** * @brief 將圖片寫入相冊(cè),使用ALAssetLibrary * *?
@param? image? ? 需要寫入的圖片 *?
@param? album? ? 相冊(cè)名稱厦取,如果相冊(cè)不存在,則新建相冊(cè) *
?@param? completionHandler 回調(diào)
?*/
- (void)saveImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler;
@end
@interface ALAssetsLibrary (STAssetsLibrary)
- (void)writeImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler;
@end
.m
#import "STAlbumManager.h"
#importvoid STImageWriteToPhotosAlbum(UIImage *image, NSString *album, STAlbumSaveHandler completionHandler) {
[[STAlbumManager sharedManager] saveImage:image toAlbum:album completionHandler:completionHandler];
}
@interface STAlbumManager ()
@property(nonatomic, strong) ALAssetsLibrary *assetsLibrary;
@end
@implementation STAlbumManager
static STAlbumManager *_sharedManager;
+ (instancetype)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ _sharedManager = [[self alloc] init]; });
return _sharedManager;
}
- (instancetype)init {
self = [super init];
if (self) {
}
return self;
}
- (ALAssetsLibrary *)assetsLibrary {
if (!_assetsLibrary) {
_assetsLibrary = [[ALAssetsLibrary alloc] init];
}
return _assetsLibrary;
}
- (void)saveImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler {
[self.assetsLibrary writeImage:image
toAlbum:album
completionHandler:^(UIImage *image, NSError *error) {
if (completionHandler) {
completionHandler(image, error);
}
/// 注意管搪,這里每次都置空是因?yàn)槠陂g如果操作相冊(cè)了虾攻,下次保存之前希望能取到最新狀態(tài)。
self.assetsLibrary = nil;
}];
}
@end
@implementation ALAssetsLibrary (STAssetsLibrary)
- (void)writeImage:(UIImage *)image toAlbum:(NSString *)album completionHandler:(STAlbumSaveHandler)completionHandler {
[self writeImageToSavedPhotosAlbum:image.CGImage
orientation:(ALAssetOrientation)image.imageOrientation
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
if (completionHandler) {
completionHandler(image, error);
}
} else {
[self addAssetURL:assetURL
toAlbum:album
completionHandler:^(NSError *error) {
if (completionHandler) {
completionHandler(image, error);
}
}];
}
}];
}
- (void)addAssetURL:(NSURL *)assetURL toAlbum:(NSString *)album completionHandler:(ALAssetsLibraryAccessFailureBlock)completionHandler {
void (^assetForURLBlock)(NSURL *, ALAssetsGroup *) = ^(NSURL *URL, ALAssetsGroup *group) {
[self assetForURL:assetURL
resultBlock:^(ALAsset *asset) {
[group addAsset:asset];
completionHandler(nil);
}
failureBlock:^(NSError *error) { completionHandler(error); }];
};
__block ALAssetsGroup *group;
[self enumerateGroupsWithTypes:ALAssetsGroupAlbum
usingBlock:^(ALAssetsGroup *_group, BOOL *stop) {
if ([album isEqualToString:[_group valueForProperty:ALAssetsGroupPropertyName]]) {
group = _group;
}
if (!_group) {
/// 循環(huán)結(jié)束
if (group) {
assetForURLBlock(assetURL, group);
} else {
[self addAssetsGroupAlbumWithName:album
resultBlock:^(ALAssetsGroup *group) { assetForURLBlock(assetURL, group); }
failureBlock:completionHandler];
}
}
}
failureBlock:completionHandler];
}
@end
在需要的地方調(diào)用就可以實(shí)現(xiàn)了...