2011-02-27 7 views
2

내보기 컨트롤러에서 특정 UIImageView (문서 디렉터리에서 큰 jpeg로드가 완료되면 어떻게 알 수 있습니까?) 나는이 고해상도 이미지 뷰어로 자리 표시 자의 저해상도 이미지 뷰를 바꿀 수 있도록 알아야합니다. 이것을 알기 위해 커스텀 콜백을 생성해야합니까? 어떤 방법 으로든 괜찮습니다.UIimageView가로드를 완료하는 방법을 알고 계십니까?

NSString *fileName = [NSString stringWithFormat:@"hires_%i.jpg", currentPage]; 
NSString *filePath = [NSString stringWithFormat:@"%@/BookImage/%@", [self documentsDirectory], fileName]; 
hiResImageView.image = [[[UIImage alloc] initWithContentsOfFile:filePath] autorelease]; 
+0

이미지로드 방법을 소스 코드로 알려주십시오. – Tim

+0

감사합니다 @Tim - 여기에 그 소스 코드 중 일부가 있습니다. – m0rtimer

+0

'큰 jpeg'의 크기는 얼마입니까? 왜냐하면 당신이 심각하게 큰 소리로 말하고 있다면 어떤 종류의 기와를 사용하는 것이 훨씬 낫습니다. UIImageViews와 큰 이미지와 관련된 성능에 큰 영향이 있습니다. – lxt

답변

2

있는 UIImageView는 전혀로드를 수행하지 않습니다 : 나 이미지를로드 할 경우 그런데

, 여기에 코드 조각입니다. 모든 로딩은 [[UIImage alloc] initWithContentsOfFile:filePath]에 의해 수행되고 파일이로드되는 동안 스레드가 차단됩니다 (따라서 호출이 마침내 반환 될 때까지로드가 이미 완료됩니다).

- (void)loadImage:(NSString *)filePath { 
    [self performSelectorInBackground:@selector(loadImageInBackground:) withObject:filePath]; 
} 

- (void)loadImageInBackground:(NSString *)filePath { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]; 
    [self performSelectorOnMainThread:@selector(didLoadImageInBackground:) withObject:image waitUntilDone:YES]; 
    [image release]; 
    [pool release]; 
} 

- (void)didLoadImageInBackground:(UIImage *)image { 
    self.imageView.image = image; 
} 

당신은 고해상도 버전을로드 loadImage:를 호출 한 후 저해상도 이미지를 표시 self.imageView을 설정 한 것입니다 : 당신이 원하는 무엇

이 같은 것입니다.

이전 호출에서 didLoadImageInBackground:이 호출되기 전에이 호출을 반복적으로 호출하면 장치의 메모리가 부족해질 수 있습니다. 또는 첫 번째 호출에서 가져온 이미지가 didLoadImageInBackground:이 두 번째 이미지에 대해 호출되기 전에 두 번째 호출에서 가져온 이미지보다로드하는 데 오래 걸릴 수도 있습니다. 이러한 문제를 해결하는 것은 독자 (또는 다른 질문)에게 연습 과제로 남겨 둡니다.

+0

감사합니다. 훌륭한 답변입니다. 하지만, - (void) didLoadImageInBackground : 이미지로드가 완료 될 때까지 (UIImage *) 이미지 보장 대기? 이것은 런타임에 작업의 실제 순서 인 나의 관심사입니다. – m0rtimer

+0

앞에서 말한 것처럼 이미지는 [[[UIImage alloc] initWithContentsOfFile : filePath]'가 반환 될 때로드됩니다. – Anomie

+0

이것, 이해합니다 - 고마워요. – m0rtimer

관련 문제