在UIScrollView中加载图像时的活动指示器 [英] Activity Indicator while loading images inside UIScrollView

查看:92
本文介绍了在UIScrollView中加载图像时的活动指示器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有UIScrollView包含来自服务器的图片。

I have UIScrollView that contains images from the server.

我应该在图片正在加载时显示活动指示符。

I should put Activity Indicator while the image is currently loading.

UIScrollView包含来自服务器的动态图片数量。

UIScrollView contains dynamic number of images from the server.

我可以在图片加载和移除时在每个网页上添加活动指示器

May I know how can I add activity indicators on each page while the image is loading and remove once image is loaded.

这是我的代码检索图片:

Here's my code to retrieve images:

NSDictionary *items = [NSDictionary dictionaryWithObject:dictInfo forKey:@"images"];
imageList = [items objectForKey:@"images"];
NSArray *img = [imageList objectForKey:@"list"];
NSInteger imgCount = [img count];
buttonArray = [[NSMutableArray alloc] init];

for (int i=0; i<imgCount; i++) {
    NSDictionary *imgDict = [img objectAtIndex:i];
    // REQUEST FOR IMAGES
    NSString *imgPath = [imgDict objectForKey:@"image_slot"];
    NSString *imgURL = imgPath;

    __block ASIHTTPRequest *requestImage = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:imgURL]];
    [requestImage setCompletionBlock:^{
        imgView = [UIImage imageWithData:[requestImage responseData]];

        if (imgURL.length) {
            [pendingRequests removeObjectForKey:imgURL];
        }

        scrollView.userInteractionEnabled = YES;
        scrollView.exclusiveTouch = YES;
        scrollView.canCancelContentTouches = YES;
        scrollView.delaysContentTouches = YES;
        scrollView.bounces = NO;

        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;

        SWTUIButton *imgBtn = [[SWTUIButton alloc] initWithFrame:frame];
        imgBtn.url = [requestImage.userInfo objectForKey:@"rURL"];
        [imgBtn setImage:imgView forState:UIControlStateNormal];
        imgBtn.backgroundColor = [UIColor clearColor];
        [imgBtn addTarget:self action:@selector(buttonpushed:) forControlEvents:UIControlEventTouchUpInside];
        [scrollView addSubview:imgBtn];

        [buttonArray addObject:imgBtn];

        [imgBtn release];

        self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * img.count, self.scrollView.frame.size.height);
    }];


推荐答案

我强烈建议您使用NINetworkImageView https://github.com/jverkoey/nimbus 项目。
这很轻,很有用。
我有一个委托方法,让你知道什么时候加载图像。
你基本上需要做的是:
1.为每个页面创建一个NINetworkImageView,就像你使用UIImageView一样,调用set

I highly suggest you use NINetworkImageView from https://github.com/jverkoey/nimbus project. It's very light and useful. I has a delegate method to let you know when an image is loaded. What you basically need to do is: 1. create an NINetworkImageView for each page, just like you do with UIImageView, and call set

  NINetworkImageView* networkImageView = [[[NINetworkImageView alloc] initWithImage:initialImage]
                                      autorelease];
  networkImageView.delegate = self;
  networkImageView.contentMode = UIViewContentModeCenter;
[networkImageView setPathToNetworkImage:
     @"http://farm3.static.flickr.com/2484/3929945380_deef6f4962_z.jpg"
                             forDisplaySize: CGSizeMake(kImageDimensions, kImageDimensions)];

https://github.com/jverkoey/nimbus/tree/master/examples/photos/NetworkPhotoAlbums


  1. 将指示器添加到networkImageView作为子视图。

  2. 实现委托如下:

  1. the add the indicator to the networkImageView as a subview.
  2. implement the delegate as follows:

- (void)networkImageView:(NINetworkImageView *)imageView didLoadImage:(UIImage *)image {
[imageView removeAllSubviews];

-(void)networkImageView:(NINetworkImageView *)imageView didLoadImage:(UIImage *)image { [imageView removeAllSubviews];

}

更小的代码来做同样的事情。

the end result would be a much smaller code for doing the same thing.

这篇关于在UIScrollView中加载图像时的活动指示器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆