2011-03-10 57 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

相关问题