0

我有一个 iOS 应用程序,其中有一个视图控制器,用户可以在其中访问他们的相机或库来加载图片。我正在尝试创建一个临时副本以加载到另一个视图控制器中的另一个 UIImageView 中。我能够保存文件(至少它在 NSLog 中看起来如此,但我无法访问它以填充第二个视图控制器。

用户加载图像的第一个视图控制器:

-(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;
4

3 回答 3

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
}

希望这可以帮助。

于 2013-04-02T19:21:12.037 回答
0

这很容易尝试以下步骤

1.将所选图像转换为nsdata

2.创建文档目录路径

3.将图像名称附加到文档路径中

3.使用[data writeToFile:imagePath atomically:YES]; 写最后创建的路径。

4.然后无论您想在哪里或任何地方访问文件夹中的图像

于 2013-04-03T09:30:44.383 回答
0

不确定,但你可以试试这个

userImageView.image =[UIImage imageWithData:[NSData dataWithContentsOfURL:_fileURL]];
于 2013-04-03T10:35:54.537 回答