我有一个垂直的 UIScrollView,其中包含多个缩略图(UIView)。在我的 viewWillAppear 中,我用 200 个缩略图填充 UIScrollView。
滚动并表示此 View 并不需要很长时间,但加载整个缩略图 View 却需要很长时间。因此,我正在寻找一种方法,可以在 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];
}
最佳答案
我所做的与您想要的有所不同,或者与您想要的有所不同,如果我明白的话,请进行一些修改,只需查看下面的代码
用于存储 ScrollView 的最后位置
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
现在在 ScrollView 的委托(delegate)方法中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);
}
关于iphone - 如何在垂直 UIScrollView 中延迟加载 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11097004/