美文网首页
UITableView 动态预加载

UITableView 动态预加载

作者: 朽木自雕也 | 来源:发表于2019-11-04 14:20 被阅读0次

静态临界值方案

  1. 设置当前初始化页码为 page = 1;
  2. 设置一个初始化临界值 threshold,threshold 为小于 1大于 0 的浮点数
Threshold = 0.7;
  1. 监听列表正在滚动的方法 'scrollViewDidScroll:',并取得滚动视图底边对应偏移量 currentOffsetY
currentOffSetY = scrollView.contentOffset.y + scrollView.frame.size.height;
  1. 使用滚动视图的当前底边偏移量除以可滑动的总高度得出值 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

动态临界值方案

  1. 设置当前初始化页码为 page = 1;
  2. 设置一个初始化临界值 threshold,threshold 为小于 1大于 0 的浮点数
Threshold = 0.7;
  1. 动态临界值 newThreshold 公式
newThreshold = threshold + (1-threshold)(page - 1)/page;
  1. 监听列表正在滚动的方法 'scrollViewDidScroll:',并取得滚动视图底边对应偏移量 currentOffsetY
currentOffSetY = scrollView.contentOffset.y + scrollView.frame.size.height;
  1. 使用滚动视图的当前底边偏移量除以可滑动的总高度得出值 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% 就触发预加载
  • 动态临界值方案,可以看出用户始终是滑动到倒数第四条数据才触发预加载

如果列表采用预加载方案,采用动态临界值方案会更优

方案测试 Demo

相关文章

网友评论

      本文标题:UITableView 动态预加载

      本文链接:https://www.haomeiwen.com/subject/micdbctx.html