我有一个UIImageView,允许用户放置和保存图像,直到可以保存.问题是,我不知道如何实际保存和检索我在视图中放置的图像.

我已检索图像并将其放置在UIImageView中,如下所示:

//Get Image 
- (void) getPicture:(id)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo {
    myPic.image = image;
    [picker dismissModalViewControllerAnimated:YES];
}

它在我的UIImageView中显示选定的图像很好,但我不知道如何保存它.我将视图的所有其他部分(主要是UITextfield)保存在核心数据中.我搜索了又搜索,try 了很多人们建议的代码,但要么我没有正确输入代码,要么这些建议与我设置代码的方式不符.很可能是前者.我想在UIImageView中保存图像,使用与在UITextFields中保存文本相同的操作(保存按钮).以下是我保存UITextField信息的方式:

// Handle Save Button
- (void)save {

    // Get Info From UI
    [self.referringObject setValue:self.myInfo.text forKey:@"myInfo"];

正如我之前所说,我已经try 了几种方法来实现这一点,但无法掌握.这是我有生以来第一次想对一个无生命的物体造成身体伤害,但我设法克制住了自己.

我希望能够将用户放置的图像保存到应用程序文档文件夹中的UIImageView中,然后能够检索它并将其放置在另一个UIImageView中,以便在用户将该视图推到堆栈上时显示.非常感谢您的帮助!

推荐答案

一切都很好,伙计.不要伤害自己或他人.

您可能不想将这些图像存储在核心数据中,因为如果数据集过大,这可能会影响性能.最好将图像写入文件.

NSData *pngData = UIImagePNGRepresentation(image);

这将提取您捕获的图像的PNG数据.从这里,您可以将其写入文件:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[pngData writeToFile:filePath atomically:YES]; //Write the file

以后再读也是这样.像上面那样构建路径,然后:

NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:pngData];

您可能想做的是创建一个为您创建路径字符串的方法,因为您不希望代码到处乱扔.可能是这样的:

- (NSString *)documentsPathForFileName:(NSString *)name
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
    NSString *documentsPath = [paths objectAtIndex:0];

    return [documentsPath stringByAppendingPathComponent:name]; 
}

希望这会有帮助.

Swift相关问答推荐

如何避免使用DispatchSemaphores时线程爆炸?

如何更新Square Order?

如何让CTFontCreateUIFontForLanguage与汉字和表情包协同工作?

为SwiftUI文本视图提供固定宽度,并仅在文本换行时使文本视图底部增大

如何在SwiftUI的文本视图中显示NSMutableAttributedString?

Observable.create 捕获行为

在扩展中创建通用排序函数

找出touch 点的屏幕亮度

Swift String.firstIndex(of: "\n") 返回 nil,即使字符串有 \n

如何将变量添加到不属于可解码部分的 struct ?

RxSwift 中 Single.just(...) 和 Observable.just(...) 之间有区别吗?

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

`let case(value)` 和 `case(let value)` 之间的区别 (Swift)

iOS SwiftUI - 无法转换 ObservedObject 类型的值

如何将回调传递给 View init

Swift 2 或 3 中的 Google Analytics 问题

在 iOS 中使用 Swift 保存 PDF 文件并显示它们

subscribeOn 和 observeOn 的顺序重要吗?

如何快速截取 UIView 的屏幕截图?

Swift 中的 CommonHMAC