如何在垂直UIScrollView中延迟加载我的UIViews

时间:2012-06-19 08:17:07

标签: iphone uiview uiscrollview lazy-loading

我有一个垂直的UIScrollView,它包含几个缩略图(UIViews)。在我的viewWillAppear中,我用200个缩略图填充我的UIScrollView。

滚动和表示此视图不会花费很长时间,但加载我的整个thumbnailview会这样做。所以我正在寻找一种方法,我可以在viewWillAppear上显示前20个缩略图,并在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];
}

3 个答案:

答案 0 :(得分: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的委托方法scrollViewDidEndDecelerating:我用来更改如下的值

-(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);
}

答案 1 :(得分:0)

为视图创建操作队列(NSOperation Queue)。

以下链接将帮助您: http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

答案 2 :(得分:0)

使用UICollectionView。它将延迟加载UICollectionViewCells,就像UITableView将延迟加载行一样。

每个单元格可以是缩略图或任何您想要的缩略图。