美文网首页
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