2

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

滚动和表示这个视图并不需要很长时间,但是加载我的整个缩略图视图确实如此。因此,我正在寻找一种方法,可以在 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];
}
4

3 回答 3

1

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

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

于 2014-06-10T12:45:36.007 回答
1

我所做的与您想要的有所不同,或者如果我正确地进行了一些修改,请参见以下代码

用于存储滚动视图的最后位置

float lastContentOffset;

还使用一个用于跟踪数据的索引来加载后记所需的数据

NSInteger index;

在第一次感觉到滚动视图时,我将值分配给 index 和 lastContentOffset

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

现在在滚动视图的委托方法中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);
}
于 2012-06-19T08:45:25.650 回答
0

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

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

于 2012-06-19T08:29:27.977 回答