我有一个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中,以便在用户将该视图推入堆栈时显示。任何帮助是极大的赞赏!
很好,伙计。不要伤害自己或他人。
您可能不希望将这些图像存储在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]; }
希望对您有所帮助。