2009-12-29 3 views
0

NSURL을 사용하여 인터넷에서 이미지를 얻으려면 -(void)loadView{ }에 코드를 작성했습니다. 하지만 이미지를로드하기 전에 스피너 (UIActivityIndicatorView)를 보여줄 필요가 있습니다. UIActivityIndicatorView를 사용할 위치?

#import "ImageFromWebViewController.h" 
#define USE_TEST_SERVER 1 
@implementation ImageFromWebViewController 
+(NSString *)fileName 
{ 
#if USE_TEST_SERVER 
    return @"http://happyhyderabad.files.wordpress.com/2009/04/anushka4.jpg"; 
#else 
    return @"http://nutritionresearchcenter.org/healthnews/wp-content/uploads/2008/07/johnny_depp.jpg"; 
#endif 
} 

- (void)loadView { 
    NSString *urlString = [ImageFromWebViewController fileName]; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; 
    imageView = [[UIImageView alloc] initWithImage:image]; 
    contentView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    [contentView setContentSize:[image size]]; 
    [contentView addSubview:imageView]; 
    [imageView setUserInteractionEnabled:NO]; 
    self.view = contentView; 
} 

- (void)didReceiveMemoryWarning { 
     [super didReceiveMemoryWarning]; 
     } 

- (void)dealloc { 
    [imageView release]; 
    [contentView release]; 
    [super dealloc]; 
} 
@end 

viewDidLoad에서 나는 UIActivityIndicatorView에 대한 코드를 작성하지만, 회 전자 이미지의 로딩 후 시작이 중지되지 않습니다.

어디에서 스피너 코드를 작성해야합니까?

답변

1

먼저 백그라운드 스레드에서 이미지를 다운로드해야합니다. viewDidLoad에서 회 전자를 시작한 다음 배경 스레드를 시작해야합니다. 회 전자를 숨기고 이미지를 그리는 방법은 당신이 원하는대로 할 수 있습니다. 다운로드가 끝나면 배경 스레드에서 회 전자를 숨길 수 있지만 엄밀히 말하면 일반적으로 주 스레드가 아닌 다른 스레드에서 사용자 인터페이스를 수정하지 않는 것이 좋습니다.

자신의 백그라운드 스레드를 다루는 것을 원하지 않는다면 [NSURLConnection connectionWithRequest:delegate:]을 살펴보십시오. 그러면 비동기 적으로 데이터를로드 할 수 있도록 자체 백그라운드 스레드가 시작됩니다. 이 경우 여전히 회 전자를 viewDidLoad으로 시작한 다음 NSURLConnection 데이터를 처리하고 데이터 다운로드가 완료되면 호출되는 대리자 콜백 메소드에서 회 전자를 숨 깁니다 (주 스레드로 돌아갈 것이므로 요점, 나는 믿는다).

관련 문제