静态临界值方案
设置当前初始化页码为 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% 就触发预加载
动态临界值方案,可以看出用户始终是滑动到倒数第四条数据才触发预加载
如果列表采用预加载方案,采用动态临界值方案会更优