1

ダブルforループを使用して、UIButtonをグリッド形式でUIScrollViewに追加しています。これらのUIButtonは、インターネットからデータをダウンロードすることによってUIImageを取得するUIImageViewであるサブビューを持っているため、ロードに時間がかかります。

現在、サブビューは、メソッドの実行が完全に終了するまで表示されません。間違っている場合は訂正してください。ただし、メソッドの実行が完了するまで、xcodeは追加されたサブビューを表示しないと思います。

ただし、クールな読み込み効果として、各サブビューが一度に1つずつ追加されることを示したいと思います。これをどのように実装しますか?

ありがとう!

4

1 に答える 1

3

メインスレッドが遅くならないように、複数のスレッドを使用して画像をロードする必要があります。viewWillAppear私は最近似たようなものを書きました...私のメソッドから私のコードを見てください:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    self.myImages = [self.myModel retrieveAttachments]; //Suppose this takes a long time
    for (UIImage *image in self.myImages) 
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self addImageToScrollView:image animated:YES]; });
    }
}
});

addImageToScrollViewメソッドは次のようになります。

-(void) addImageToScrollView: (UIImage *) image animated: (BOOL) animated
{
    //Create image view
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.image = image;

    if(animated)
    {
        imageView.alpha = 0;
        [self.myScrollView addSubview:imageView];
        [UIView animateWithDuration:ADD_IMAGE_APPEARING_ANIMATION_SPEED animations:^{
            imageView.alpha = 1;
        }];
    }
    else
    {
        [self.myScrollView addSubview:imageView];
    }
}
于 2012-07-19T15:38:51.517 に答える