zoukankan      html  css  js  c++  java
  • 下拉刷新和上拉载入的原理

                非常多App中,新闻或者展示类都存在下拉刷新和上拉载入的效果,网上提供了实现这样的效果的第三方类(详情请见MJRefreshEGOTableViewPullRefresh),用起来非常方便,可是闲暇之余,我们能够思考下,这样的效果实现的原理是什么,我曾经说过,仅仅要是动画都是骗人的,仅仅要不是硬件问题大部分效果都能在系统UI的基础上做出来.

                @以下是关键代码分析:

    // 下拉刷新的原理
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
    {
        if (scrollView.contentOffset.y < - 100) {
            
            [UIView animateWithDuration:1.0 animations:^{
                
                //  frame发生偏移,距离顶部150的距离(可自行设定)
                self.tableView.contentInset = UIEdgeInsetsMake(150.0f, 0.0f, 0.0f, 0.0f);
            } completion:^(BOOL finished) {
                
                /**
                 *  发起网络请求,请求刷新数据
                 */
    
            }];
        }
    }
    
    // 上拉载入的原理
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
        
        NSLog(@"%f",scrollView.contentOffset.y);
        NSLog(@"%f",scrollView.frame.size.height);
        NSLog(@"%f",scrollView.contentSize.height);
        /**
         *  关键-->
         *  scrollView一開始并不存在偏移量,可是会设定contentSize的大小,所以contentSize.height永远都会比contentOffset.y高一个手机屏幕的
         *  高度;上拉载入的效果就是每次滑动究竟部时,再往上拉的时候请求很多其它,那个时候产生的偏移量,就能让contentOffset.y + 手机屏幕尺寸高大于这
         *  个滚动视图的contentSize.height
         */
        if (scrollView.contentOffset.y + scrollView.frame.size.height >= scrollView.contentSize.height) {
            
            NSLog(@"%d %s",__LINE__,__FUNCTION__);
            [UIView commitAnimations];
            
            [UIView animateWithDuration:1.0 animations:^{
                //  frame发生的偏移量,距离底部往上提高60(可自行设定)
                self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 60, 0);
            } completion:^(BOOL finished) {
                
                /**
                 *  发起网络请求,请求载入很多其它数据
                 *  然后在数据请求回来的时候,将contentInset改为(0,0,0,0)
                 */
            }];
    
        }
    }
    


  • 相关阅读:
    C# 使用消息队列,包括远程访问
    Python3中urllib使用与源代码
    多年前写的DataTable与实体类的转换
    DataTable添加列和行的三种方法
    DevExpress 常用命令包括导出-打印-打印预览等
    c#开发_Dev的关于XtraGrid的使用(GridControl小结)
    正则表达式精华(包涵常用经典方法)
    数据库 插入时 碰到NULL报错判断的一种方法(技巧)
    MDI窗体简单方法(调用,闪屏)
    GridControl GridView 修改表格中的标题居中
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4279258.html
Copyright © 2011-2022 走看看