我有一个iOS应用程序,其中有一个视图控制器,用户可以访问他们的相机或库来加载图片。我正在尝试创建一个临时副本,以加载到另一个视图控制器中的另一个UIImageView。我能够保存文件(至少它在NSLog中看起来如此,但是我无法访问它来填充第二个viewcontroller。
用户加载图像的第一个视图控制器:
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
image = [info objectForKey:UIImagePickerControllerOriginalImage];
[userImageView setImage:image];
[self dismissViewControllerAnimated:YES completion:NULL];
//Save the temp file
tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
fileURL = [[tmpDirURL URLByAppendingPathComponent:@"userPic"] URLByAppendingPathExtension:@"jpg"];
NSLog(@"fileURL: %@", [fileURL path]);
}
我的问题是,如何在第二个视图控制器的viewdidload中调用保存的文件?
我正在玩这样的东西,但我遇到了错误(我只是希望!):
userImageView.image = _fileURL;
userImageView
是我设置为图片视图的插座。
在第一个控制器的.h文件中声明
@property (nonatomic, strong) IBOutlet NSURL *fileURL;
@property (nonatomic, strong) IBOutlet NSURL *tmpDirURL;
答案 0 :(得分:2)
您不能只将NSURL指定为图像属性。
这将是:
userImageView.image = [UIImage imageWithContentsOfFile:[_fileURL absoluteString]];
此外,它看起来并不像您实际保存文件(除非您在其他地方这样做)。为什么不保持指向所选图像的指针并将指针传递给另一个视图控制器?
你已经在行
中有一个指向UIImage的指针 image = [info objectForKey:UIImagePickerControllerOriginalImage];
。
如果在第二个视图控制器中创建UIImage属性(强),并将其设置为相同的东西,您仍然可以使用它。例如,如果您的第二个视图控制器是mySecondViewController
,并且它有一个名为theImageINeed
的属性,您可以执行以下操作:
image = [info objectForKey:UIImagePickerControllerOriginalImage];
[userImageView setImage:image];
mySecondViewController.theImageINeed = image;
但是,您似乎要从一个需要图像的视图控制器中呈现一个视图控制器。在这种情况下,我会忽略我刚才所说的内容,并为此创建一个委托方法。
这意味着在您呈现的视图标题中,您会有类似的内容:
//In the header file of the presented view
@protocol FoundMahImageDelegate <NSObject>
- (void)userSelectedAnImage:(UIImage *)image;
@end
@interface yourViewName : NSObject
//whatever else you already have
@property (nonatomic, strong) id <FoundMahImageDelegate> delegate;
@end
在.m文件中:
//In the implementation file of the presented view
image = [info objectForKey:UIImagePickerControllerOriginalImage];
[userImageView setImage:image];
[self.delegate userSelectedAnImage:image]; //<-- the part that changed
[self dismissViewControllerAnimated:YES completion:NULL];
在展示视图中,您现在必须在头文件中添加协议:
@interface myMainViewController : NSObject <FoundMahImageDelegate>
//...
在其实现文件中,添加我们在协议定义中放入的方法:
- (void)userSelectedAnImage:(UIImage *)image
{
//here you go, you've got the image, do something with it
}
希望这有帮助。
答案 1 :(得分:0)
尝试以下步骤非常容易
1.将所选图像保存到nsdata
2.创建文档目录路径
3.将图像名称添加到文档路径
3.use [data writeToFile:imagePath atomically:YES]; 写下最后创建的路径。
4.然后在任何地方或任何地方访问文档文件夹中的图像
答案 2 :(得分:0)
不确定,但你可以试试这个
userImageView.image =[UIImage imageWithData:[NSData dataWithContentsOfURL:_fileURL]];