一尘不染

从IOS上的UIView将图像保存到应用程序文档文件夹

swift

我有一个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)保存在Core
Data中。我已经搜索了很多,然后尝试了很多人建议的代码,但是要么我没有正确输入代码,要么这些建议与我的代码设置方式不符。可能是前者。我想使用与将文本保存在UITextFields中相同的操作(保存按钮)将图像保存在UIImageView中。这是我保存UITextField信息的方式:

// Handle Save Button
- (void)save {

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

就像我之前说过的那样,我尝试了几种方法来使它起作用,但无法掌握它。我一生中第一次想对无生命的物体造成身体伤害,但我设法克制了自己。

我希望能够将用户放置的图像保存到应用程序的documents文件夹中的UIImageView中,然后能够将其检索并将其放置在另一个UIImageView中,以便在用户将该视图推入堆栈时显示。任何帮助是极大的赞赏!


阅读 239

收藏
2020-07-07

共1个答案

一尘不染

很好,伙计。不要伤害自己或他人。

您可能不希望将这些图像存储在Core Data中,因为如果数据集太大,这会影响性能。最好将图像写入文件。

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]; 
}

希望对您有所帮助。

2020-07-07