私はサブビューとして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];
}
'[self.view addSubview:imageView];' ... UIImageViewがインターフェースビルダーで作成されていても? | 'self.imageView.image = self.imageViewPointer.image;' ...これは動作しますが、私が言ったように、画像は非同期的に読み込まれるので(SDWebImage)、ユーザが速すぎると画像のプロパティはnilまたはプレースホルダと私はそれへのポインタを取得します。私は、同じオブジェクトを再利用することで、最初のビューコントローラのようにWebから読み込んだときに画像が更新されることを期待していました。 – TijuanaKez
SDWebImageを使用している場合は、代わりに 'UIImageView(WebCache)' 'setImageWithURL:'メソッドを使用する必要があります。 – ThomasW
imagebuildはインターフェイスビルダーで作成されただけなので、特別なことは何もありません。 – ThomasW