@下面是關鍵代碼分析:
// 下拉重新整理的原理
- (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)
}