(iOS)如何在另一个视图中重用UIImageView?

时间:2012-03-19 05:11:36

标签: objective-c ios uiimageview

我有一个带有UIScrollView的视图控制器,其中有一堆UIImageViews作为子视图。有一个segue到另一个视图控制器但我想重用已经在内存中的UIImages而不是为了效率而再次加载它们。但是,如果我将新的UIImageView指向现有的UIImageView,则不会显示任何内容。

我不得不使用中间指针变量(imageViewPointer),就好像我直接在prepareForSegue方法中分配它一样,每个视图控制器的NSLog会显示不同的地址。此解决方法NSLog显示相同的地址,但仍然没有显示。

如果我使用重新分配.image属性,则会显示图像,但第一个视图控制器中的图像是异步加载的,因此.image属性可能会更改。

在第一个视图控制器中

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    NextViewController *nextViewController = [segue destinationViewController];
    nextViewController.imageViewPointer = [[myScrollView subviews] objectAtIndex:myIndex];
    NSLog(@"%@", [[myScrollView subviews] objectAtIndex:myIndex]);
}

在第二个视图控制器中

@interface nextViewController : UIViewController

@property (retain, nonatomic) IBOutlet UIImageView *imageView;
@property (retain, nonatomic) UIImageView *imageViewPointer;

@implementation nextViewController

@synthesize imageView, imageViewPointer;

{
    self.imageView = self.imageViewPointer;

//    [self.imageView setNeedsDisplay];   Doesn't help

    NSLog(@"IMAGE VIEW POINTER = %@", self.imageViewPointer);
    NSLog(@"IMAGE VIEW = %@", self.imageView);

    [super viewDidLoad];
}

2 个答案:

答案 0 :(得分:1)

如果只是分配这样的视图,它将不会出现在当前视图控制器视图的视图层次结构中。您需要执行以下操作:

[self.view addSubview: imageView];

但是,我不建议这样做。最好只将视图图像分配给另一个视图的图像。

self.imageView.image = self.imageViewPointer.image;

答案 1 :(得分:0)

您重复使用UIImage或者您正在执行的方法有点不对,因为您将imageViewPointer分配给imageView,这是(imageViewPointer)而不是视图控制器的子视图视图。因此,在分配imageViewPointer之后添加子视图imageViewimageViewPointer