静态临界值方案
- 设置当前初始化页码为 page = 1;
- 设置一个初始化临界值 threshold,threshold 为小于 1大于 0 的浮点数
Threshold = 0.7;
- 监听列表正在滚动的方法 'scrollViewDidScroll:',并取得滚动视图底边对应偏移量 currentOffsetY
currentOffSetY = scrollView.contentOffset.y + scrollView.frame.size.height;
- 使用滚动视图的当前底边偏移量除以可滑动的总高度得出值 ratio ,将 ratio 与 newThreshold 做对比,若 ratio 大于等于 newThreshold 则触发预加载
// 总的可滑动区域
totalContentSizeY = scrollView.contentSize.height;
// 取得当前滑动视图的底边的偏移量
ratio = currentOffSetY/totalContentSizeY;
// 比较临界值大小
if (ratio >= Threshold) {
// 执行预加载数据。。。。
}
设计此预加载的原因在于当前页数越多,totalContentSizeY 值就越大,如果临界值写死为 threshold ,那么就会造成最后是整体数据查看的比例为 threshold 而不是最后页的数据查看的比例为 threshold,就会导致新加载的数据都还没有看到,应用程序又开始加载下一页数据了,页数愈多,弊端愈明显。
根据静态临界值举个例子,
page(页码) | total(总数据条数) | current(当前列表上展示的最后一条数据) | threshold(临界值) |
---|---|---|---|
1 | 10 | 7 | 0.7 |
2 | 20 | 14 | 0.7 |
3 | 30 | 21 | 0.7 |
4 | 40 | 28 | 0.7 |
5 | 50 | 35 | 0.7 |
动态临界值方案
- 设置当前初始化页码为 page = 1;
- 设置一个初始化临界值 threshold,threshold 为小于 1大于 0 的浮点数
Threshold = 0.7;
- 动态临界值 newThreshold 公式
newThreshold = threshold + (1-threshold)(page - 1)/page;
- 监听列表正在滚动的方法 'scrollViewDidScroll:',并取得滚动视图底边对应偏移量 currentOffsetY
currentOffSetY = scrollView.contentOffset.y + scrollView.frame.size.height;
- 使用滚动视图的当前底边偏移量除以可滑动的总高度得出值 ratio ,将 ratio 与 newThreshold 做对比,若 ratio 大于等于 newThreshold 则触发预加载
// 动态临界值
// 总的可滑动区域
totalContentSizeY = scrollView.contentSize.height;
// 取得当前滑动视图的底边的偏移量
ratio = currentOffSetY/totalContentSizeY;
// 比较临界值大小
if (ratio >= newThreshold) {
// 执行预加载数据。。。。
}
根据动态临界值举个例子
page(页码) | total(总数据条数) | threshold(临界值) | newthreshold(动态临界值) | current(当前列表上展示的最后一条数据) |
---|---|---|---|---|
1 | 10 | 0.7 | 0.7 | 7 |
2 | 20 | 0.7 | 0.85 | 17 |
3 | 30 | 0.7 | 0.88 | 26.4 |
4 | 40 | 0.7 | 0.9225 | 36.9 |
5 | 50 | 0.7 | 0.94 | 47 |
总结
- 静态临界值方案,可以看出用户滑动到整体数据的 70% 就触发预加载
- 动态临界值方案,可以看出用户始终是滑动到倒数第四条数据才触发预加载
如果列表采用预加载方案,采用动态临界值方案会更优
网友评论