iOS 下拉重新整理-上拉載入原理,ios載入

來源:互聯網
上載者:User

iOS 下拉重新整理-上拉載入原理,ios載入
前言講下拉重新整理及上拉載入之前先給大家解釋UIScrollView的幾個屬性

  • contentSize是UIScrollView可以滾動的地區。
  • contentOfinset 蘋果官方文檔的解釋是"內容視圖嵌入到封閉的滾動視圖的距離,我的理解是他實際上就是scrollView的Content View相對於scrollView的外殼的邊距,他其實和CSS中的pading屬性有點相似。
  • contentOffset是UIScrollView當前顯示地區的頂點相對於frame頂點的位移量,例如上面的例子如果拉到最下面,則contentOffset就是(0, 480),也就是y位移了480.
下拉重新整理及上拉載入原理
  • 下拉重新整理實際上是監測UIScrollView的contentOffset的y值,當他往下拉動時,UIScrollView的contentOffset是一直減小的,然後把通過動畫把它的contentInset值控製成一個定值,然後通過設定延時來把UIScrollView的contentInset的值恢複原點。啥話不說,上代碼
//下拉重新整理      if (scrollView.contentOffset.y < -100) {                [UIView animateWithDuration:1.0 animations:^{                        self.scrollView.contentInset = UIEdgeInsetsMake(100, 0, 0, 0);                    } completion:^(BOOL finished) {                        NSLog(@"發起下拉重新整理");                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                                [UIView animateWithDuration:1.0 animations:^{                                        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);                }];                            });                    }];        }
  • 上拉載入其實原理和下拉重新整理基本是一樣的,只不過判斷的contentOffset的值不同,如果scrollView.bounds.size.height +  scrollView.contentOffset.y >scrollView.contentSize.height,說明你執行了上拉操作,然後實現起來基本就和下拉重新整理是一樣的。
//上拉載入        if (scrollView.bounds.size.height +  scrollView.contentOffset.y >scrollView.contentSize.height) {                [UIView animateWithDuration:1.0 animations:^{                        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);                    } completion:^(BOOL finished) {                        NSLog(@"發起上拉載入");                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                                [UIView animateWithDuration:1.0 animations:^{                                        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);                                    }];            });        }];                    }
下面奉上完整的demo代碼,大家看不懂的可以私聊我,要是想深入瞭解的話可以去github搜尋MJRefresh看完整的別人封裝好的第三方
#import "ViewController.h"@interface ViewController ()<UIScrollViewDelegate>@property (nonatomic, strong) UIScrollView * scrollView;@end@implementation ViewController- (UIScrollView *)scrollView {        if (!_scrollView) {        _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];                //contentSize是可滑動的地區        _scrollView.contentSize = CGSizeMake(0, 900);        _scrollView.backgroundColor = [UIColor grayColor];        _scrollView.delegate = self;                //greenView實際上就是UIScrollView的content View        UIView * greenView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 900)];        greenView.backgroundColor = [UIColor greenColor];        [_scrollView addSubview:greenView];            }    return _scrollView;}- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {            //下拉重新整理-當下拉重新整理時,contentOffset實際上就是greenView相對於螢幕左上方的位移量。    if (scrollView.contentOffset.y < -100) {                [UIView animateWithDuration:1.0 animations:^{                        self.scrollView.contentInset = UIEdgeInsetsMake(100, 0, 0, 0);                    } completion:^(BOOL finished) {                        NSLog(@"發起下拉重新整理");                        //設定延時時間為2秒            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                                [UIView animateWithDuration:1.0 animations:^{                    //恢複之前的contentInset,讓greenView回到原來的地方                    self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);                }];                            });                    }];        }        //上拉載入        if (scrollView.bounds.size.height +  scrollView.contentOffset.y >scrollView.contentSize.height) {                [UIView animateWithDuration:1.0 animations:^{                        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);                    } completion:^(BOOL finished) {                        NSLog(@"發起上拉載入");                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                                [UIView animateWithDuration:1.0 animations:^{                                        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);                                    }];            });        }];                    }    }- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    [self.view addSubview:self.scrollView];            }- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.