天天看點

下拉重新整理和上拉加載的原理

            @下面是關鍵代碼分析:

下拉重新整理和上拉加載的原理

// 下拉重新整理的原理  

- (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];  

            //  frame發生的偏移量,距離底部往上提高60(可自行設定)  

            self.tableview.contentinset = uiedgeinsetsmake(0, 0, 60, 0);  

             *  發起網絡請求,請求加載更多資料 

             *  然後在資料請求回來的時候,将contentinset改為(0,0,0,0) 

}