欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

下拉刷新控件目前比較火的有好幾種,本人用過MJRefresh 和 SVPullToRefresh,相對(duì)而言,前者比后者可定制化、拓展新都更高一點(diǎn)。

我們提供的服務(wù)有:做網(wǎng)站、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、孝感ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的孝感網(wǎng)站制作公司

因此本文著重講一下MJRefresh的簡(jiǎn)單用法。

導(dǎo)入項(xiàng)目:

cocoapods導(dǎo)入:pod 'MJRefresh'

手動(dòng)導(dǎo)入:

  •  將MJRefresh文件夾中的所有文件拽入項(xiàng)目中
  • 導(dǎo)入主頭文件:#import "MJRefresh.h"

使用介紹:

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

廣泛性分為6種使用場(chǎng)景,分別對(duì)應(yīng):默認(rèn)、動(dòng)畫圖片、隱藏時(shí)間、隱藏時(shí)間和狀態(tài)、自定義文字說明、以及自定義刷新控件。 

下面就各種場(chǎng)景分別講一下:

1、默認(rèn)場(chǎng)景

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

包含刷新菊花、下拉說明、時(shí)間

使用代碼:

#pragma mark UITableView + 下拉刷新 默認(rèn)

- (void)example01

{

  __weak __typeof(self) weakSelf = self; 

  // 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài)就會(huì)調(diào)用這個(gè)refreshingBlock)

  self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{

    [weakSelf loadNewData];

  }];

  // 馬上進(jìn)入刷新狀態(tài)

  [self.tableView.mj_header beginRefreshing];

} 

2、使用動(dòng)畫圖片

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

PS:這里的動(dòng)畫并不是用gif實(shí)現(xiàn)的,而是利用序列幀(即若干圖片組成一個(gè)不同狀態(tài)下的圖片數(shù)組,然后根據(jù)位置顯示不同圖片)去展現(xiàn)。

#pragma mark UITableView + 下拉刷新 動(dòng)畫圖片

- (void)example02

{

  // 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài),就調(diào)用target的action,也就是調(diào)用self的loadNewData方法)

  self.tableView.mj_header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

   

  // 馬上進(jìn)入刷新狀態(tài)

  [self.tableView.mj_header beginRefreshing];

} 

這里用大眾點(diǎn)評(píng)吃包子圖片為例,新建一個(gè)自定義類 MJChiBaoZiHeader,繼承:MJRefreshGifHeader

#import "MJRefreshGifHeader.h" 

@interface MJChiBaoZiHeader : MJRefreshGifHeader 

@end

然后重寫prepare方法,代碼:

- (void)prepare

{

  [super prepare];   

  // 設(shè)置普通狀態(tài)的動(dòng)畫圖片

  NSMutableArray *idleImages = [NSMutableArray array];

  for (NSUInteger i = 1; i<=60; i++) {

    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];

    [idleImages addObject:image];

  }

   [self setImages:idleImages forState:MJRefreshStateIdle];   

  // 設(shè)置即將刷新狀態(tài)的動(dòng)畫圖片(一松開就會(huì)刷新的狀態(tài))

  NSMutableArray *refreshingImages = [NSMutableArray array];

  for (NSUInteger i = 1; i<=3; i++) {

    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];

    [refreshingImages addObject:image];

  }

  [self setImages:refreshingImages forState:MJRefreshStatePulling];  

  // 設(shè)置正在刷新狀態(tài)的動(dòng)畫圖片

  [self setImages:refreshingImages forState:MJRefreshStateRefreshing];

} 

關(guān)鍵點(diǎn)就是這里的兩個(gè)圖片數(shù)組,60是因?yàn)橄吕丶J(rèn)拉動(dòng)距離就是60距離,這里比較嚴(yán)謹(jǐn),利用60張不同圖片去對(duì)應(yīng)每個(gè)距離點(diǎn),當(dāng)然實(shí)際中,我們可以縮減,不需要精確到每個(gè)距離點(diǎn)對(duì)應(yīng)一張圖片,這里個(gè)人自己決定。

這里需要先了解下,下拉的五種狀態(tài)。如下:

/** 刷新控件的狀態(tài) */

typedef NS_ENUM(NSInteger, MJRefreshState) {

  /** 普通閑置狀態(tài) */

  MJRefreshStateIdle = 1,

  /** 松開就可以進(jìn)行刷新的狀態(tài) */

  MJRefreshStatePulling,

  /** 正在刷新中的狀態(tài) */

  MJRefreshStateRefreshing,

  /** 即將刷新的狀態(tài) */

  MJRefreshStateWillRefresh,

  /** 所有數(shù)據(jù)加載完畢,沒有更多的數(shù)據(jù)了 */

  MJRefreshStateNoMoreData

}; 

idleImages圖片數(shù)組對(duì)應(yīng)閑置下拉狀態(tài),表示下拉到臨界值前的展示圖片。

refreshingImages圖片數(shù)組對(duì)應(yīng)正在刷新時(shí)的動(dòng)畫展示圖片,一般這里需要3~5張圖片去模擬動(dòng)畫。<br><br>重寫完<span class="s1">prepare方法,就可以實(shí)現(xiàn)動(dòng)畫了。<br><br></span>

3、下拉刷新 隱藏時(shí)間

 iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

這里與默認(rèn)的區(qū)別就是不顯示上次刷新時(shí)間,使用方法:

#pragma mark UITableView + 下拉刷新 隱藏時(shí)間

- (void)example03

{

  // 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài),就調(diào)用target的action,也就是調(diào)用self的loadNewData方法)

  MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

   

  // 設(shè)置自動(dòng)切換透明度(在導(dǎo)航欄下面自動(dòng)隱藏)

  header.automaticallyChangeAlpha = YES;

  // 隱藏時(shí)間

  header.lastUpdatedTimeLabel.hidden = YES;
  // 馬上進(jìn)入刷新狀態(tài)

  [header beginRefreshing];
  // 設(shè)置header

  self.tableView.mj_header = header;

} 


4、下拉刷新 隱藏狀態(tài)和時(shí)間

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解 

這個(gè)場(chǎng)景一般適用于只需要?jiǎng)赢嬚故?,?jiǎn)潔清爽,也是用的蠻多的。

同樣,處理很簡(jiǎn)單。

#pragma mark UITableView + 下拉刷新 隱藏狀態(tài)和時(shí)間

- (void)example04

{

  // 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài),就調(diào)用target的action,也就是調(diào)用self的loadNewData方法)

  MJChiBaoZiHeader *header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

   

  // 隱藏時(shí)間

  header.lastUpdatedTimeLabel.hidden = YES;

 

  // 隱藏狀態(tài)

  header.stateLabel.hidden = YES;

   

  // 馬上進(jìn)入刷新狀態(tài)

  [header beginRefreshing];

   

  // 設(shè)置header

  self.tableView.mj_header = header;

} 

5、下拉刷新 自定義文字

想自己DIY個(gè)性文字描述,一樣很簡(jiǎn)單。

不管是文字text、文字大小、還是顏色都一句話搞定。

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

#pragma mark UITableView + 下拉刷新 自定義文字

- (void)example05

{

  // 設(shè)置回調(diào)(一旦進(jìn)入刷新狀態(tài),就調(diào)用target的action,也就是調(diào)用self的loadNewData方法)

  MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

   

  // 設(shè)置文字

  [header setTitle:@"快扯我,快點(diǎn)" forState:MJRefreshStateIdle];

  [header setTitle:@"數(shù)據(jù)要來啦" forState:MJRefreshStatePulling];

  [header setTitle:@"服務(wù)器正在狂奔 ..." forState:MJRefreshStateRefreshing];

   

  // 設(shè)置字體

  header.stateLabel.font = [UIFont systemFontOfSize:15];

  header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];

 

  // 設(shè)置顏色

  header.stateLabel.textColor = [UIColor redColor];

  header.lastUpdatedTimeLabel.textColor = [UIColor grayColor];

   

  // 馬上進(jìn)入刷新狀態(tài)

  [header beginRefreshing];

   

  // 設(shè)置刷新控件

  self.tableView.mj_header = header;

} 

6、下拉刷新 自定義刷新控件

上面的都不夠玩,怎么辦,沒關(guān)系,還有最后一種更定制化的方法:自己加控件樣式。

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解

這里不限于任何控件,我們可以在頭部的這片區(qū)域,盡情添加Subviews,但記住一點(diǎn),高度千萬(wàn)不要吵過header高度(默認(rèn)60)。

除了控件,甚至可以自己繪制動(dòng)畫等等。

實(shí)現(xiàn)原理:同樣先自定義自己的類,繼承 MJRefreshHeader

重寫 prepare 方法,再重寫 placeSubviews 方法 設(shè)置位置。

代碼:

a、定義控件屬性

@interface MJDIYHeader()

@property (weak, nonatomic) UILabel *label;

@property (weak, nonatomic) UISwitch *s;

@property (weak, nonatomic) UIImageView *logo;

@property (weak, nonatomic) UIActivityIndicatorView *loading;

@end 

b、重寫prepare方法

#pragma mark 在這里做一些初始化配置(比如添加子控件)

- (void)prepare

{

  [super prepare];  

  // 設(shè)置控件的高度

  self.mj_h = 50;

   

  // 添加label

  UILabel *label = [[UILabel alloc] init];

  label.textColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0];

  label.font = [UIFont boldSystemFontOfSize:16];

  label.textAlignment = NSTextAlignmentCenter;

  [self addSubview:label];

  self.label = label;

   

  // 打醬油的開關(guān)

  UISwitch *s = [[UISwitch alloc] init];

  [self addSubview:s];

  self.s = s;

   

  // logo

  UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Logo"]];

  logo.contentMode = UIViewContentModeScaleAspectFit;

  [self addSubview:logo];

  self.logo = logo;

   

  // loading

  UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

  [self addSubview:loading];

  self.loading = loading;

} 

c、重寫 placeSubviews

#pragma mark 在這里設(shè)置子控件的位置和尺寸

- (void)placeSubviews

{

  [super placeSubviews];

 

  self.label.frame = self.bounds;

   

  self.logo.bounds = CGRectMake(0, 0, self.bounds.size.width, 100);

  self.logo.center = CGPointMake(self.mj_w * 0.5, - self.logo.mj_h + 20);

   

  self.loading.center = CGPointMake(self.mj_w - 30, self.mj_h * 0.5);

} 

d、根據(jù)下拉位移,自定義不同位移的控件展示,比如顯示不同文字,顏色等

#pragma mark 監(jiān)聽控件的刷新狀態(tài)

- (void)setState:(MJRefreshState)state

{

  MJRefreshCheckState;

 

  switch (state) {

    case MJRefreshStateIdle:

      [self.loading stopAnimating];

      [self.s setOn:NO animated:YES];

      self.label.text = @"趕緊下拉吖(開關(guān)是打醬油滴)";

      break;

    case MJRefreshStatePulling:

      [self.loading stopAnimating];

      [self.s setOn:YES animated:YES];

      self.label.text = @"趕緊放開我吧(開關(guān)是打醬油滴)";

      break;

    case MJRefreshStateRefreshing:

      [self.s setOn:YES animated:YES];

      self.label.text = @"加載數(shù)據(jù)中(開關(guān)是打醬油滴)";

      [self.loading startAnimating];

      break;

    default:

      break;

  }

} 

上拉刷新加載其實(shí)和下拉是同理,只不過區(qū)別就是:

self.tableView.mj_header  變成 self.tableView.mj_footer,后面的類也由

MJRefreshNormalHeader 變成  MJRefreshAutoNormalFooter。

實(shí)現(xiàn)原理是相同的。

下載源碼:http://xiazai.jb51.net/201701/yuanma/MJRefresh_jb51.rar

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)頁(yè)題目:iOS實(shí)現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解
網(wǎng)站鏈接:http://aaarwkj.com/article34/gooese.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)外貿(mào)建站、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站排名搜索引擎優(yōu)化、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
日本啪啪精品一区二区三区| 国产精品久久午夜伦鲁鲁| 亚洲社区一区二区三区四区| 蜜臀午夜精品视频在线观看| 久久国产精品一区二区三区| 午夜体内射精免费视频| 亚洲美女插入av网络导航| 成年人免费观看黄色片| 国产亚洲成人精品久久| 五月婷婷六月丁香伊人网| 欧美在线观看日韩精品| 射精视频在线观看免费| 久久九九亚洲欧美中文字幕 | 最近最新免费成人在线视频| 后入蜜桃臀美女在线观看| 草莓午夜视频在线观看| 日韩亚洲毛片全在线播放| 久久偷拍精品视频久久| 亚洲欧洲国产视频一区二区 | 国产极品嫩模在线观看91 | 日本高清有码视频在线观看| 国产精品黄黄久久久免费| 91青青草原免费观看| 2022国产精品一区| 人妻久久久久久精品99| 国产三级精品久久三级国专区| 懂色粉嫩蜜臀久久一区二区| 日本欧美精品一区二区精选| 91狠狠综合久久精品| 久久亚洲精品中文字幕一| 亚洲国产精品午夜福利在线播放| 免费久久人人爽人人爽| 久草午夜福利视频免费观看| 日本岛国大片在线视频| 99热这里只有精品56| 日韩福利成人av在线| 久久久人妻精品一区二区三区四区| 国产国产精品国产自在午夜| 国产日产精品久久婷婷色 | 亚洲欧美精品专区久久| 日本韩国欧美一区二区在线|