【问题标题】:UIActivityIndicatorView when loading image from online?从在线加载图像时的UIActivityIndi​​catorView?
【发布时间】:2011-03-10 23:52:03
【问题描述】:

我有一个简单的脚本,它显示在互联网上的 UIImageView 中。

有没有办法显示 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];

谢谢! 库尔顿

编辑:代码已删除

【问题讨论】:

    标签: objective-c xcode ios4 uiimageview uiimage


    【解决方案1】:
    -[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];
    }
    

    希望这会有所帮助!

    【讨论】:

    • 我试过这个,但失败了。请看我更新的帖子!谢谢。
    • 可能有很多错误,我真的没仔细看才发。再次感谢! PS:这条线失败了:NSURLRequest *request = [[[NSURLRequest alloc] initWithURL:imagePath] autorelease];.
    • 我很抱歉。 initWithURL 接受一个 NSURL,而不是一个 NSString。您需要使用 -[NSURL initWithString:] 请参阅上面的修改答案。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多