2011-03-10 56 views
1

我有一個簡單的腳本,顯示在互聯網上的UIImageView。UIActivityIndi​​catorView從網上加載圖像時?

有沒有辦法顯示一個UIActivityIndi​​catorView或類似的東西來顯示用戶它正在加載?

這裏是我的最少的代碼:

NSString *imagePath = [NSString stringWithFormat:@"urlofimagehere.jpg"]; 
NSData *mydata = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imagePath]]; 
UIImage *myimage = [[UIImage alloc] initWithData:mydata]; 
[imageView setImage:myimage]; 
[myimage release]; 

謝謝! 庫爾頓

編輯:代碼中刪除

回答

3
-[NSData initWithContentsOfURL:] 

是同步方法。這意味着它會阻塞,直到數據通過網絡加載。如果你想能夠保持你的UI響應,你會想要使用異步方法。欲瞭解更多信息,請閱讀:http://akosma.com/2010/05/28/initwithcontentsofurl-methods-considered-harmful/

我建議使用NSURLRequest和NSURLRequestDelegate在數據完成加載時接收回調。這裏有一個例子:

- (void)loadImageAtURL(NSString *)urlString { 
    [myUIActivityIndicatorView startAnimating]; 

    // SHOW NETWORK INDICATOR 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

    // SET UP THE REQUEST 
    NSURL *url = [[NSURL alloc] initWithString:urlString]; 
    NSURLRequest *request = [[[NSURLRequest alloc] initWithURL:url] autorelease]; 

    // SET UP THE CONNECTION 
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    mutData = [[[NSMutableData alloc] init] retain]; 
} 

- (void)connection:(NSURLConnection *)connection 
    didFailWithError:(NSError *)error { 
    // Handle error 
} 

- (void)connection:(NSURLConnection *)connection 
    didReceiveData:(NSData *)data { 
    [mutData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection { 

    // ONCE LOADED HIDE NETWORK INDICATOR 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

    // RELEASE THE CONNECTION 
    [connection release]; 

    // CREATE NEW UIIMAGE FROM THE DATA 
    image = [[[UIImage alloc] initWithData:mutData] retain]; 
    [mutData release]; 

    // HIDE THE ACTIVITY INDICATOR 
    // Make sure hidesWhenStopped is set to YES on the activity indicator. 
    [myUIActivityIndicatorView stopAnimating]; 
    [myUIImageView setImage:image]; 
    [image release]; 
} 

希望這有助於!

+0

我試過了,失敗了。請看我更新的帖子!謝謝。 – iosfreak 2011-03-19 18:18:40

+0

這裏有很多錯誤,在發佈之前我真的沒有看過它。再次感謝! PS:在這一行失敗:'NSURLRequest * request = [[[NSURLRequest alloc] initWithURL:imagePath] autorelease];'。 – iosfreak 2011-03-19 18:20:25

+0

我的歉意。 initWithURL接受一個NSURL,而不是一個NSString。您需要使用 - [NSURL initWithString:]請參閱上面的修改答案。 – 2011-03-19 18:34:32

相關問題