gpt4 book ai didi

ios - UIScrollview 'skips' 页面延迟加载

转载 作者:行者123 更新时间:2023-11-29 02:56:51 25 4
gpt4 key购买 nike

我正在 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; 函数,但同样的问题,当滚动到快速时,不会调用此方法。

如有任何帮助,我们将不胜感激!

最佳答案

如果您尝试在用户滚动时在 ScrollView 中实现 View 的重用,您应该遵循以下规则:

  1. 始终加载上一页、当前页和下一页(将当前页作为第一页或最后一页的情况除外)。
  2. 当您在滚动方向上遇到下一页的一半时,应该会发生不可见页面的出队和重新排序。例如。用于向左滚动

    myScrollView.contentOffset.x <= (0.5f + (_currentIndex - 1)) * myScrollView.bounds.size.width;

UPD 1

3.重用时 - 您应该只移动不可见页面,而不是将其作为 subview 删除/添加到 ScrollView 上。

UPD 2:您还可以尝试使用具有水平滚动功能的 UICollectionView 和具有整个页面大小的单元格,而不是实现自己的重用机制。

关于ios - UIScrollview 'skips' 页面延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23777774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com