2012-03-19 16 views
0

私はサブビューとしてUIImageViewsのヒープを持つUIScrollViewを持つビューコントローラを持っています。別のビューコントローラにセグがありますが、私は効率のためにそれらを再度ロードするのではなく、すでにメモリにあるUIImageを再利用したいと思います。しかし、私が新しいUIImageViewを既存のものに向けると、何も表示されません。(iOS)別のビューでUIImageViewを再利用するにはどうすればよいですか?

私はそれを直接prepareForSegueメソッドで割り当てると中間ポインタ変数(imageViewPointer)を使用する必要がありました。各ビューコントローラのNSLogは異なるアドレスを表示します。この回避策NSLogsは同じアドレスを表示しますが、何も表示されません。

代わりに.imageプロパティを使用すると、イメージは表示されますが、最初のView Controllerのイメージは非同期に読み込まれ、.imageプロパティが変更される可能性があります。あなたは、単にそのようなビューを割り当てた場合

第2のビューコントローラで最初のビューコントローラ

-(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)、ユーザが速すぎると画像のプロパティはnilまたはプレースホルダと私はそれへのポインタを取得します。私は、同じオブジェクトを再利用することで、最初のビューコントローラのようにWebから読み込んだときに画像が更新されることを期待していました。 – TijuanaKez

+0

SDWebImageを使用している場合は、代わりに 'UIImageView(WebCache)' 'setImageWithURL:'メソッドを使用する必要があります。 – ThomasW

+0

imagebuildはインターフェイスビルダーで作成されただけなので、特別なことは何もありません。 – ThomasW

0

あなたがUIImageを再利用したり、(imageViewPointer)あなたのビューコントローラのビューのサブビューされていないimageViewimageViewPointerを割り当てるよう、あなたがやっている方法が少し間違っている。どちらのしたがって、imageViewPointerを割り当てた後にサブビューimageViewPointerまたはimageViewを追加してください。

+0

私はあなたを正しく理解しているかどうかはわかりませんが、imageViewはインターフェースビルダーで作成されたUIImageViewのIBOutletですので、すでにメインUIViewのサブビューです。 imageViewPointerは単なる中間変数です。これは、最初のView ControllerのprepareForSegueメソッドから直接 'nextViewController.imageView'プロパティを設定すると、何らかの理由でNSLogのアドレスが一致しないためです。 nextViewController.imageViewPointerを仲介者として使用することにより、NSLogはすべて私が望むものと同じアドレスを出力します。 – TijuanaKez

+0

imageViewはIBに接続されていますが、imageViewPointerで再割り当てすると、xib UIImageViewとimageViewは割り当て時とは異なります。新しいimageViewはビューのサブビューではありません。 –

関連する問題