Хотя можно сохранить от UIImage
до NSUserDefaults
, часто это не рекомендуется, поскольку это не самый эффективный способ сохранения изображений; более эффективным способом является сохранение вашего изображения в Documents Directory
.
приложения.
Для целей этого вопроса я приложил ответ на ваш вопрос вместе с более эффективным способом сохранения UIImage
.
NSUserDefaults (не рекомендуется)
Сохранение в NSUserDefaults
Этот метод позволяет сохранить любой UIImage
в NSUserDefaults
.
-(void)saveImageToUserDefaults:(UIImage *)image ofType:(NSString *)extension forKey:(NSString *)key {
NSData * data;
if ([[extension lowercaseString] isEqualToString:@"png"]) {
data = UIImagePNGRepresentation(image);
} else if ([[extension lowercaseString] isEqualToString:@"jpg"]) {
data = UIImageJPEGRepresentation(image, 1.0);
}
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:data forKey:key];
[userDefaults synchronize];
}
Вот как вы это называете:
[self saveImageToUserDefaults:image ofType:@"jpg" forKey:@"myImage"];
[[NSUserDefaults standardUserDefaults] synchronize];
Загрузка из NSUserDefaults
Этот метод позволяет загружать любые UIImage
из NSUserDefaults
.
-(UIImage *)loadImageFromUserDefaultsForKey:(NSString *)key {
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
return [UIImage imageWithData:[userDefaults objectForKey:key]];
}
Вот как вы это называете:
UIImage * image = [self loadImageFromUserDefaultsForKey:@"myImage"];
Лучшая альтернатива
Каталог для сохранения документов
Этот метод позволяет вам сохранить любой UIImage
в Documents Directory
в приложении.
-(void)saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
if ([[extension lowercaseString] isEqualToString:@"png"]) {
[UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil];
} else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
[UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
} else {
NSLog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);
}
}
Вот как вы это называете:
NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
[self saveImage:image withFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
Загрузка из каталога документов
Этот метод позволяет загружать любые UIImage
из приложения Documents Directory
.
-(UIImage *)loadImageWithFileName:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, [extension lowercaseString]]];
return result;
}
Вот как вы это называете:
NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
UIImage * image = [self loadImageWithFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
Другая альтернатива
Сохранение UIImage в библиотеку фотографий
Этот метод позволяет сохранить любой UIImage
на устройстве Photo Library
и вызывается следующим образом:
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
Сохранение нескольких UIImages в библиотеку фотографий
Этот метод позволяет сохранить несколько UIImages
на устройстве Photo Library
.
-(void)saveImagesToPhotoAlbums:(NSArray *)images {
for (int x = 0; x < [images count]; x++) {
UIImage * image = [images objectAtIndex:x];
if (image != nil) UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
}
Вот как вы это называете:
[self saveImagesToPhotoAlbums:images];
Где images
- ваш NSArray
, состоящий из UIImages
.