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

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一区二区| 熟女人妻丰满视频中文字幕| 韩日男人女人性生活视频| 欧美黄片在线免费观看视频| 日本午夜视频一区二区| 中文字幕亚洲精品99| 国产精品国产亚洲精品| 亚洲国产女人精品久久久| 中文字幕乱码亚洲美女精品| 亚洲无线码一区国产欧美国日| 久久热福利视频就在这里| 国产日韩亚洲欧美色片| 国产亚洲一区二区三区乱码| 青草免费在线播放视频| 婷婷色精品一区二区激情| 欧美精品亚洲精品国产| 国产三级国产精品国产| 国产精品色网在线播放| 国产精品国产精品国产| 亚洲视频一区二区精品| 一级欧美黄片在线播放| 大片天天看菲色亚洲黄色| 欧美激情中文字幕日韩精品| 日韩av手机在线不卡| 就去吻色综合一二三四| 日韩精品二区在线观看| 91在线看片国产免费观看| 熟女一区二区中文字幕| 国产饥渴熟女在线三区| 国产精品日产三级在线观看| 亚洲午夜一区二区精品| 国产日韩欧美国产精品| 国产三级精品在线免费| 国产黄色av网站在线| 欧美精品日韩精品一区二区| 精品国产女同一区二区| 午夜精品一区二区亚洲| 丰满多毛熟妇的大阴户| 黄色亚洲大片免费在线观看| 亚洲美女国产精选999|