1

サーバーからの画像を含む UIScrollView があります。

画像が現在ロードされている間に、アクティビティ インジケーターを配置する必要があります。

UIScrollView には、サーバーからの動的な数の画像が含まれています。

画像の読み込み中に各ページにアクティビティ インジケーターを追加し、画像が読み込まれたら削除する方法を教えてください。

画像を取得するための私のコードは次のとおりです。

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);
    }];
4

1 に答える 1

1

https://github.com/jverkoey/nimbusプロジェクトの NINetworkImageView を使用することを強くお勧めします。とても軽くて便利です。画像が読み込まれたときに通知するデリゲート メソッドがあります。基本的に必要なことは次のとおりです。

  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. 次のようにデリゲートを実装します。

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

    }

最終結果は、同じことを行うためのはるかに小さなコードになります。

于 2012-04-28T05:54:19.410 に答える