我在UIScrollView
中实现了一种“延迟加载”算法。我需要检测页面是否“完全”显示,就好像只有一个页面可见。所以我正在使用这段代码:
-(void)scrollViewDidScroll:(UIScrollView *)myScrollView {
float currentPage = ((float)myScrollView.contentOffset.x/ (self.view.frame.size.width));
NSLog([NSString stringWithFormat:@"%.1f", currentPage]);
if(currentPage >= [[NSNumber numberWithInt:_currentIndex + 1]floatValue])
{
_currentIndex = [[NSNumber numberWithFloat:currentPage]intValue];
NSLog(@"----");
NSLog([NSString stringWithFormat:@"%d", _currentIndex]);
[self moveFirstToLast];
}
else if (currentPage <= [[NSNumber numberWithInt:_currentIndex - 1]floatValue])
{
_currentIndex = [[NSNumber numberWithFloat:currentPage]intValue];
NSLog(@"----");
NSLog([NSString stringWithFormat:@"%d", _currentIndex]);
[self moveLastToFirst];
}
代码的第一部分没问题。当页面“完全可见”并执行UIScrollview
功能时,[self moveFirstToLast]
会正确检测到。当用户执行权限滚动手势时会发生这种情况。
但是,当我向左滚动并快速滚动时,算法有时会跳过一步!因此[self moveLastToFirst]
并不总是按时正确执行。我不知道这是怎么来的?任何人?是否有更好的方法来检测页面是否完全显示?
我已经尝试了- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
函数,但同样的问题,当滚动到快速时,不会调用此方法。
非常感谢任何帮助!
答案 0 :(得分:1)
如果您在用户滚动时尝试在滚动视图中实现视图的重用,则应遵循以下规则:
当您在滚动的方向上遇到下一页的一半时,应该会出现不可见页面的出列和重新排序。例如。用于左滚动
myScrollView.contentOffset.x <= (0.5f + (_currentIndex - 1)) * myScrollView.bounds.size.width;
UPD 1
3。重用时 - 您应该只移动非可见页面,而不是将其作为子视图删除/添加到scrollView上。
UPD 2 :您也可以尝试将UICollectionView与水平滚动和整页大小的单元格一起使用,而不是实现自己的重用机制。