2012-03-19 45 views
0

我有一個UIScrollView視圖控制器與一堆UIImageViews作爲子視圖。有一個segue到另一個視圖控制器,但我想重用已經在內存中的UIImages,而不是爲了效率而重新加載它們。但是,如果我將新的UIImageView指向現有的UIImageView,則不會顯示任何內容。(iOS)如何在其他視圖中重用UIImageView?

我不得不使用中間指針變量(imageViewPointer),就好像我直接在prepareForSegue方法中指定它一樣,每個視圖控制器的NSLog都會顯示不同的地址。此解決方法NSLogs顯示相同的地址,但仍然沒有顯示。

如果我使用重新分配.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]; 
} 

回答

1

如果你只是將這樣的一個觀點,就不會出現當前視圖中的視圖層次控制者的觀點。你需要做的是這樣:

[self.view addSubview: imageView]; 

不過,我不會建議。最好將視圖的圖像分配給另一個視圖的圖像。

self.imageView.image = self.imageViewPointer.image; 
+0

'[self.view addSubview:imageView];'...即使UIImageView是在界面構建器中創建的? | 'self.imageView.image = self.imageViewPointer.image;'...這可以工作,但正如我所說的,圖像是異步加載的(SDWebImage),所以如果用戶速度太快,image屬性將被設置爲nil或一個佔位符,我會得到一個指針。我希望通過重複使用同一個對象,圖像在從網上加載時會更新,就像它在第一個視圖控制器中一樣。 – TijuanaKez 2012-03-19 05:52:21

+0

如果您使用SDWebImage,則應該使用'UIImageView(WebCache)''setImageWithURL:'方法。 – ThomasW 2012-03-19 06:08:43

+0

imageView沒有什麼特別之處,因爲它是使用界面構建器創建的。 – ThomasW 2012-03-19 06:11:52

0

要麼你重用UIImage或你正在做的方法是有點不對,你是分配給imageViewPointer其中imageView是(imageViewPointer)不是你的視圖控制器的視圖的子視圖。因此,在分配imageViewPointer後添加子視圖imageViewPointerimageView

+0

我不確定我是否正確理解你,但imageView是在界面生成器中創建的UIImageView的IBOutlet,所以它已經是主UIView的子視圖。 imageViewPointer只是一箇中間變量。我這樣做是因爲如果我直接從第一個視圖控制器的prepareForSegue方法設置「nextViewController.imageView」屬性,出於某種原因,NSLog中的地址不匹配。通過使用nextViewController.imageViewPointer作爲中介,我得到所有NSLog的輸出相同的地址,這是我想要的。 – TijuanaKez 2012-03-19 06:00:19

+0

看到您的imageView已連接到IB,但是當您將其重新分配給imageViewPointer時,您的xib UIImageView和imageView與您分配時不同。而你的新imageView不是你視圖的子視圖。 – 2012-03-19 06:06:27