从第一个ViewController到第二个ViewController的图像

时间:2014-07-09 09:47:13

标签: ios objective-c uiviewcontroller

我有2个ViewControllers,在第一个按钮下载图像,如何缓存此图像并发送到第二个ViewController?非常感谢。

First ViewController:

在.h

@interface asdViewController : UIViewController {

    IBOutlet UIButton *actBtnGet;



}
@property (strong, nonatomic) IBOutlet UIImageView *ImageView;

@end

在.m

- (IBAction)actBtnGet:(id)sender {
    id path = @"http://www.host.com/132.png";
    NSURL *url = [NSURL URLWithString:path];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *img = [[UIImage alloc] initWithData:data];
    self.ImageView.image=img;

}

4 个答案:

答案 0 :(得分:2)

在第二个视图控制器中创建一个属性:

// inside your Second View Controller .h file
@property (nonatomic, strong) UIImage *storedImage;

然后在推送第二个视图控制器之前,设置storedImage:

// inside your First View Controller .m file
-(void)showSecondVC
{
    SecondVC *secondVC = [[SecondVC alloc] init];
    secondVC.storedImage = self.downloadedImage;

    [self.navigationController pushViewController:secondVC animated:YES];
}

其他信息

对于缓存机制,已经有两个很好的库已经提供了:

我个人更喜欢SDWebImage:D

将一个库导入项目之后,通常是一行代码,如下所示:

[myImageView setImageWithURL:imageURL placeholderImage:nil options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {

    // do something here in the completion callback block
    [self showSecondVC];
}];

如果图像检测到使用的URL地址相同,那么这两个库会缓存图像,所以如果你给它一个URL:

http://www.imageserver.com/someImage.png

第一次,它下载并缓存该地址的图像。第二次再次传递相同的URL地址时,它会从缓存中获取它而不是从服务器下载它。

SDWebImage有更多花哨的选项,可以使用下载管理器下载图像而不需要使用UIImageView,但是这通常适用于更复杂的场景,上述方法足以满足大部分时间。

答案 1 :(得分:1)

您可以在secondViewController中添加方法。

-(void)initWithImage:(UIImage *)image{
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
     if (self) {
          //assign this image to a UIImage object
     }
     return self;
}

从First View Controller调用此方法

SecondVC *secondVC = [[SecondVC alloc] initWithImage:self.image];
[self.navigationController pushViewController:secondVC animated:YES];

答案 2 :(得分:0)

张说(虽然这不能称为缓存)或者如果您正在寻找可以缓存从Web下载的图像的图像缓存,请查看AFNetworking,它有一个很好的UIImageView类别。如上所述,传递到另一个视图控制器部分是正常的。

UIImageView+AFNetworking

答案 3 :(得分:0)

我总是这样做(假设您使用segue进入第二个视图):

在第二个视图控制器.h文件中创建图像属性:

@property (strong, nonatomic) IBOutlet UIImageView *Image;

在第一个视图控制器中,在.m文件中使用它:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    //Use this if statement only if you have several segues coming from your first view, if so, you also need to add identifier to the segue you are using
    if([segue.identifier isEqualToString:@"segueToSecondView"])
    {
        SecondViewController *secondView = segue.destinationViewController;
        secondView.imageView.image = img;
    }
}