我有一个垂直的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];
}
答案 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将延迟加载行一样。
每个单元格可以是缩略图或任何您想要的缩略图。