最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年01月20日 16:53:32   作者:那一抹風(fēng)情  
本篇文章主要介紹了iOS實現(xiàn)MJRefresh下拉刷新(上拉加載)使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

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

因此本文著重講一下MJRefresh的簡單用法。

導(dǎo)入項目:

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

手動導(dǎo)入:

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

使用介紹:

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

下面就各種場景分別講一下:

1、默認(rèn)場景

包含刷新菊花、下拉說明、時間

使用代碼:

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

- (void)example01

{

  __weak __typeof(self) weakSelf = self; 

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

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

    [weakSelf loadNewData];

  }];

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

  [self.tableView.mj_header beginRefreshing];

} 

2、使用動畫圖片

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

#pragma mark UITableView + 下拉刷新 動畫圖片

- (void)example02

{

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

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

   

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

  [self.tableView.mj_header beginRefreshing];

} 

這里用大眾點評吃包子圖片為例,新建一個自定義類 MJChiBaoZiHeader,繼承:MJRefreshGifHeader

#import "MJRefreshGifHeader.h" 

@interface MJChiBaoZiHeader : MJRefreshGifHeader 

@end

然后重寫prepare方法,代碼:

- (void)prepare

{

  [super prepare];   

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

  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)的動畫圖片(一松開就會刷新的狀態(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)的動畫圖片

  [self setImages:refreshingImages forState:MJRefreshStateRefreshing];

} 

關(guān)鍵點就是這里的兩個圖片數(shù)組,60是因為下拉控件默認(rèn)拉動距離就是60距離,這里比較嚴(yán)謹(jǐn),利用60張不同圖片去對應(yīng)每個距離點,當(dāng)然實際中,我們可以縮減,不需要精確到每個距離點對應(yīng)一張圖片,這里個人自己決定。

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

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

typedef NS_ENUM(NSInteger, MJRefreshState) {

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

  MJRefreshStateIdle = 1,

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

  MJRefreshStatePulling,

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

  MJRefreshStateRefreshing,

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

  MJRefreshStateWillRefresh,

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

  MJRefreshStateNoMoreData

}; 

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

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

3、下拉刷新 隱藏時間

 

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

#pragma mark UITableView + 下拉刷新 隱藏時間

- (void)example03

{

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

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

   

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

  header.automaticallyChangeAlpha = YES;

  // 隱藏時間

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

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

  self.tableView.mj_header = header;

} 


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

 

這個場景一般適用于只需要動畫展示,簡潔清爽,也是用的蠻多的。

同樣,處理很簡單。

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

- (void)example04

{

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

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

   

  // 隱藏時間

  header.lastUpdatedTimeLabel.hidden = YES;

 

  // 隱藏狀態(tài)

  header.stateLabel.hidden = YES;

   

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

  [header beginRefreshing];

   

  // 設(shè)置header

  self.tableView.mj_header = header;

} 

5、下拉刷新 自定義文字

想自己DIY個性文字描述,一樣很簡單。

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

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

- (void)example05

{

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

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

   

  // 設(shè)置文字

  [header setTitle:@"快扯我,快點" 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];

   

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

  [header beginRefreshing];

   

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

  self.tableView.mj_header = header;

} 

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

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

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

除了控件,甚至可以自己繪制動畫等等。

實現(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;

  }

} 

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

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

MJRefreshNormalHeader 變成  MJRefreshAutoNormalFooter。

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IOS 應(yīng)用之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞詳解

    IOS 應(yīng)用之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞詳解

    這篇文章主要介紹了IOS 應(yīng)用之間的跳轉(zhuǎn)和數(shù)據(jù)傳遞詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • IOS 城市定位詳解及簡單實例

    IOS 城市定位詳解及簡單實例

    這篇文章主要介紹了IOS 城市定位詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • IOS實現(xiàn)圓形圖片效果的兩種方法

    IOS實現(xiàn)圓形圖片效果的兩種方法

    這篇文章介紹在IOS中如何實現(xiàn)圓形圖片,實現(xiàn)后的效果很贊,有需要的可以參考借鑒。
    2016-08-08
  • Flutter列表滾動定位超強輔助庫使用示例詳解

    Flutter列表滾動定位超強輔助庫使用示例詳解

    這篇文章主要為大家介紹了Flutter列表滾動定位超強輔助庫使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • iOS開發(fā)之XLForm的使用方法

    iOS開發(fā)之XLForm的使用方法

    這篇文章主要介紹了iOS開發(fā)之XLForm的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • iOS開發(fā)網(wǎng)絡(luò)編程之?dāng)帱c續(xù)傳

    iOS開發(fā)網(wǎng)絡(luò)編程之?dāng)帱c續(xù)傳

    在下載較大的文件的時候,一次不能下載完畢,這就需要用到斷點續(xù)傳,那么在IOS開發(fā)中該如何實現(xiàn)呢,下面跟著小編一起通過本文來學(xué)習(xí)下。
    2016-08-08
  • iOS實現(xiàn)背景滑動效果

    iOS實現(xiàn)背景滑動效果

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)背景滑動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • iOS如何為導(dǎo)航欄添加播放動畫

    iOS如何為導(dǎo)航欄添加播放動畫

    這篇文章主要為大家詳細(xì)介紹了iOS如何為導(dǎo)航欄添加播放動畫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • iOS實現(xiàn)視頻壓縮上傳實例代碼

    iOS實現(xiàn)視頻壓縮上傳實例代碼

    本篇文章主要介紹了iOS實現(xiàn)視頻壓縮上傳實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 如何自定義iOS通訊錄

    如何自定義iOS通訊錄

    iOS項目中用到對通訊錄的聯(lián)系人或是會員按姓名為關(guān)鍵字進行排序,這篇文章就為大家詳細(xì)介紹了如何自定義iOS通訊錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論

安化县| 台湾省| 板桥市| 永德县| 锡林郭勒盟| 静宁县| 巩义市| 阜新| 新密市| 抚松县| 漳浦县| 宜宾市| 将乐县| 连南| 林甸县| 霍城县| 托克逊县| 鄢陵县| 西城区| 高碑店市| 苏尼特右旗| 宁海县| 台东县| 崇信县| 彭泽县| 青阳县| 河津市| 大荔县| 泰安市| 繁峙县| 遂川县| 天祝| 丹阳市| 皮山县| 玉林市| 常山县| 光山县| 新民市| 莲花县| 桓台县| 天津市|