2012-03-19 2 views
0

서브 뷰로 UIImageViews의 힙을 가진 UIScrollView가있는 뷰 컨트롤러가 있습니다. 다른보기 컨트롤러에 segue가 있지만 효율성을 위해 다시로드하지 않고 이미 메모리에있는 UIImages를 다시 사용하려고합니다. 그러나 새로운 UIImageView를 기존의 것으로 지정하면 아무 것도 나타나지 않습니다.(iOS) 다른 뷰에서 UIImageView를 어떻게 재사용 할 수 있습니까?

중간 포인터 변수 (imageViewPointer)를 prepareForSegue 메서드에서 직접 할당 한 것처럼 사용하면 각보기 컨트롤러의 NSLog가 다른 주소를 표시합니다. 이 해결 방법 NSLogs 같은 주소를 표시하지만 여전히 아무것도 나타나지 않습니다.

대신 .image 속성을 다시 할당하면 이미지가 표시되지만 첫 번째보기 컨트롤러의 이미지는 비동기 적으로로드되므로 .image 속성이 변경 될 수 있습니다. 당신은 단순히 그런보기를 할당하는 경우

@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

, 그것은 현재 뷰의 뷰 계층에 나타나지 않습니다 두 번째 뷰 컨트롤러의 첫 번째 뷰 컨트롤러

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

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

에서

컨트롤러의 관점. 다음과 같이해야합니다.

[self.view addSubview: imageView]; 

그러나 저는 권장하지 않습니다. 보기의 이미지를 다른보기의 이미지에 지정하는 것이 좋습니다.

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

'[self.view addSubview : imageView];'... UIImageView가 인터페이스 작성기에서 만들어진 경우에도? | 'self.imageView.image = self.imageViewPointer.image;'... 이것은 작동하지만 말했듯이 이미지는 비동기 적으로로드됩니다 (SDWebImage). 너무 빠르면 이미지 속성이 nil 또는 자리 표시 자와 나는 그것에 대한 포인터를 얻게 될 것이다. 동일한 객체를 재사용하면 첫 번째 뷰 컨트롤러에서와 같이 웹에서로드 된 이미지가 업데이트됩니다. – TijuanaKez

+0

SDWebImage를 사용한다면'UIImageView (WebCache)''setImageWithURL :'메소드를 사용해야합니다. – ThomasW

+0

인터페이스 빌더로 작성 되었기 때문에 imageView에 특별한 것은 없습니다. – ThomasW

0

은 어느 쪽이든 당신은 UIImage 재사용하거나 imageViewPointerimageView에 (imageViewPointer) 인 뷰 컨트롤러의 뷰의 서브 뷰를하지 할당하는 당신이하고있는 방법은 조금 잘못된 것입니다. 따라서 imageViewPointer을 할당 한 후 서브 뷰 imageViewPointer 또는 imageView을 추가하십시오.

+0

나는 당신을 올바르게 이해하고 있는지 잘 모르겠다. imageView는 인터페이스 빌더에서 생성 된 UIImageView를위한 IBOutlet이므로 이미 메인 UIView의 서브 뷰이다. imageViewPointer는 단지 매개 변수 일뿐입니다. 첫 번째보기 컨트롤러의 prepareForSegue 메서드에서 직접'nextViewController.imageView' 속성을 설정하면 어떤 이유로 NSLog의 주소가 일치하지 않기 때문에이 작업을 수행했습니다. nextViewController.imageViewPointer를 중개자로 사용하면 모든 NSLog가 원하는 주소를 출력하게됩니다. – TijuanaKez

+0

imageView가 IB에 연결되어 있지만 imageViewPointer로 다시 할당하면 xib UIImageView와 imageView가 할당 된대로 달라집니다. 그리고 새로운 imageView는 뷰의 하위 뷰가 아닙니다. –

관련 문제