2

いくつかのサムネイル (UIViews) を含む垂直 UIScrollView があります。viewWillAppear 内で、UIScrollView を 200 個のサムネイルで埋めています。

このビューのスクロールと表示には時間がかかりませんが、サムネイルビュー全体の読み込みには時間がかかります。したがって、最初の 20 個のサムネイルを viewWillAppear に表示し、残りを UIScrollView のデリゲート メソッドにロードできる方法を探しています-(void) scrollViewDidScroll:(UIScrollView *)scrollView{

しかし、実際の実装は私にはあまり明確ではありません。viewWillAppear にすべてのサムネイルをプリロードしますか?それとも最初の 20 個だけをプリロードしますか? scrollViewDidScroll に描画する必要がある新しいサムネイルの場所を追跡するにはどうすればよいですか? うまくいけば、誰かが私を正しい方向に向けることができます。

サムネイルを描画する現在のviewWillAppearの実装は次のとおりです

for (int i = 0; i <= 20; i++){
            birdRow = (int) floor(i / 4);
            birdColumn = (i % 4) + 1; 
            paddingX = 125;
            UIView * thumbnail = [[UIView alloc] initWithFrame:CGRectMake(170*birdColumn - paddingX, 180*birdRow + 20, 160, 170)];
            [scroller addSubview:thumbnail];
}
4

3 に答える 3

1

UICollectionView を使用します。UITableView が行を遅延ロードするのと同じように、UICollectionViewCells を遅延ロードします。

各セルは、サムネイルまたは任意のセルにすることができます。

于 2014-06-10T12:45:36.007 に答える
1

私がやったことは、あなたが望むものとは異なるもの、またはいくつかの変更を加えたものと同じです。

スクロールビューの最後の位置を保存するため

float lastContentOffset;

あとがきに必要なデータをロードするためにデータのインデックスを追跡するためにも使用します

NSInteger index;

scrollView を初めて感じたときに、値を index と lastContentOffset に割り当てます

index = Currently shown image index;
lastContentOffset = scrollview.contentOffset.x;//it shows currently visible rect's origin's x value

Scroll ViewのDelegate MethodscrollViewDidEndDecelerating:で、以下のように値を変更するために使用します

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"ScrollViewDidScroll is called"); 
    if(lastContentOffset < scrollView.contentOffset.x)
    {
        index += (int)(scrollview.contentOffset.x - lastContentOffset)/scrollview.frame.size.width;
        NSLog(@"Index incremented %d",index);
        //Load required new images also can remove some of the images
    }
    else if(lastContentOffset > scrollView.contentOffset.x)
    {
        index -= (int)(lastContentOffset - scrollview.contentOffset.x)/scrollview.frame.size.width;
        NSLog(@"Index decremented %d",index);
        //Load required new images also can remove some of the images
    }
    lastContentOffset = scrollView.contentOffset.x;
    NSLog(@"New lastContentOffset %.2f",lastContentOffset);
}
于 2012-06-19T08:45:25.650 に答える
0

ビューのオペレーション キュー (NSOperation キュー) を作成します。

以下のリンクが役に立ちます: http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

于 2012-06-19T08:29:27.977 に答える