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

淺析iOS多視圖滑動(dòng)點(diǎn)擊切換的集成

 更新時(shí)間:2016年08月12日 10:31:59   投稿:daisy  
本文將大家常常會(huì)用到的多視圖滑動(dòng)點(diǎn)擊切換視圖進(jìn)行封裝,這樣在大家使用的時(shí)候就很方便了,有需要的可以參考學(xué)習(xí),下面一起來(lái)看看吧。

前言

多視圖滑動(dòng)點(diǎn)擊切換這個(gè)視圖在很多App都有用到,我對(duì)這個(gè)View進(jìn)行了封裝,外界只需要調(diào)用一個(gè)接口,就能實(shí)現(xiàn)這個(gè)效果,使用方法和系統(tǒng)的tabbarController很相似。

外界只需要調(diào)用下面這個(gè)接口即可集成.

/**
 * 添加一個(gè)子控制器
 */
- (void)addSubItemWithViewController:(UIViewController *)viewController;

HYTabbarView效果圖如下

HYTabbarView可靈活配置一屏寬顯示多少個(gè)標(biāo)題,以及標(biāo)題欄的高度,具體看項(xiàng)目需求

#define HYTabbarViewHeight 49 //頂部標(biāo)簽條的高度
#define HYColumn 4  //一屏幕寬顯示4個(gè)標(biāo)題

實(shí)現(xiàn)思路詳解

     1、界面分析:分為上下部分,頂部UIScrollView,底部UICollectionView.再實(shí)現(xiàn)兩部分的聯(lián)動(dòng)即可實(shí)現(xiàn) (底部視圖相對(duì)復(fù)雜,占用內(nèi)存大,底部用UICollectionView實(shí)現(xiàn)會(huì)比用UIScrollView性能好很多)

     2、每一個(gè)標(biāo)題對(duì)應(yīng)一個(gè)View視圖,View視圖交由相應(yīng)的控制器來(lái)管理,代碼結(jié)構(gòu)十分清晰.做到不同View上的業(yè)務(wù)邏輯高聚合.也不會(huì)產(chǎn)生耦合性

     3、上下兩部分的聯(lián)動(dòng),這里是同過(guò)KVO實(shí)現(xiàn)的,監(jiān)聽當(dāng)前的selectedIndex,底部視圖滾動(dòng)時(shí),修改selectedIndex的值.在KVO監(jiān)聽的回調(diào)方法里讓標(biāo)題居中.

     4、其他細(xì)節(jié)相對(duì)簡(jiǎn)單,大家不看代碼都知道如何處理,比如:點(diǎn)擊頂部標(biāo)題,設(shè)置按鈕選中,切換到對(duì)應(yīng)的CollectionCell

UI結(jié)構(gòu)示意圖

代碼片段:

1.外界傳個(gè)控制器和一個(gè)標(biāo)題,添加一個(gè)欄目

//外界傳個(gè)控制器,添加一個(gè)欄目
- (void)addSubItemWithViewController:(UIViewController *)viewController{ 
  
 UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
 [self.tabbar addSubview:btn];
 [self setupBtn:btn withTitle:viewController.title];
 [btn addTarget:self action:@selector(itemSelected:) forControlEvents:UIControlEventTouchUpInside];
 [self.subViewControllers addObject:viewController];
}

2.KVO監(jiān)聽當(dāng)前選中View的序號(hào)值

//viewDidLoad中添加觀察者
[self addObserver:self forKeyPath:@"selectedIndex" options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:@"scrollToNextItem"];
 
//讓標(biāo)題按鈕居中算法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
   
 if (context == @"scrollToNextItem") {
  self.prevSelectedIndex = [change[@"old"] integerValue];
  if (self.prevSelectedIndex == self.selectedIndex) {
   return;
  }
  //設(shè)置按鈕選中
  [self itemSelectedIndex:self.selectedIndex];
  UIButton * btn = self.titles[self.selectedIndex];
  
  //讓選中按鈕居中
  NSInteger min = HYColumn / 2 ;
  if (_selectedIndex = self.titles.count - min) {
   UIButton * tempBtn = self.titles[self.titles.count - min - 1];
   CGFloat btnX = (HYColumn % 2 ) ? tempBtn.center.x : (tempBtn.center.x + btn.frame.size.width * 0.5) ;
   CGFloat offsetX = _tabbar.center.x - btnX;
   [UIView animateWithDuration:0.25 animations:^{
    _tabbar.contentOffset = CGPointMake(- offsetX, 0);
   }];  
  }else if (_selectedIndex > min && _selectedIndex < self.titles.count - min && self.titles.count > HYColumn ) {
   CGFloat btnX = (HYColumn % 2 ) ? btn.center.x : (btn.center.x - btn.frame.size.width * 0.5) ;
   CGFloat offsetX = _tabbar.center.x - btnX;
   [UIView animateWithDuration:0.25 animations:^{
    _tabbar.contentOffset = CGPointMake( - offsetX, 0);
   }];
  }
 } else {
  [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
 }
} 

控制器代碼如下

使用方法類似系統(tǒng)的UITabbarController,外界只需直接傳入控制器.

- (void)viewDidLoad {
 [super viewDidLoad];
 [self.view addSubview:self.tabbarView];
}//懶加載- (HYTabbarView *)tabbarView{ if (!_tabbarView) {
  _tabbarView = ({
   HYTabbarView * tabbar = [[HYTabbarView alloc]initWithFrame:CGRectMake(0,30,[UIScreen mainScreen].bounds.size.width,600)];   
   for (NSInteger i = 0; i< 10; i ++) {    
    UIViewController * vc = [[UIViewController alloc]init];
    vc.title = [NSString stringWithFormat:@"第%ld個(gè)",i+1];
    [tabbar addSubItemWithViewController:vc];
   }
   tabbar;
  });
 } return _tabbarView;
}

總結(jié)

以上就是iOS多視圖滑動(dòng)點(diǎn)擊切換的集成的全部?jī)?nèi)容,希望對(duì)大家開發(fā)IOS的時(shí)候能有所幫助。

相關(guān)文章

  • iOS中視頻播放器的簡(jiǎn)單封裝詳解

    iOS中視頻播放器的簡(jiǎn)單封裝詳解

    要實(shí)現(xiàn)封裝視頻播放器,首先需要實(shí)現(xiàn)視頻播放器,然后再去考慮怎樣封裝可以讓以后自己使用起來(lái)方便快捷。iOS9之前可以使用MediaPlayer來(lái)進(jìn)行視頻的播放,iOS9之后系統(tǒng)推薦使用AVFoundation框架實(shí)現(xiàn)視頻的播放。下面通過(guò)本文來(lái)看看詳細(xì)的介紹吧。
    2016-10-10
  • 混合棧跳轉(zhuǎn)導(dǎo)致Flutter頁(yè)面事件卡死問(wèn)題解決

    混合棧跳轉(zhuǎn)導(dǎo)致Flutter頁(yè)面事件卡死問(wèn)題解決

    這篇文章主要為大家介紹了混合棧跳轉(zhuǎn)導(dǎo)致Flutter頁(yè)面事件卡死問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • iOS 超級(jí)簽名之描述文件的實(shí)現(xiàn)過(guò)程

    iOS 超級(jí)簽名之描述文件的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了iOS 超級(jí)簽名實(shí)現(xiàn)之描述文件的實(shí)現(xiàn)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • IOSdrawRect實(shí)現(xiàn)雪花飄落效果

    IOSdrawRect實(shí)現(xiàn)雪花飄落效果

    這篇文章主要為大家詳細(xì)介紹了IOSdrawRect實(shí)現(xiàn)雪花飄落效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 詳解iOS集成GoogleMap(定位、搜索)

    詳解iOS集成GoogleMap(定位、搜索)

    這篇文章主要介紹了iOS集成GoogleMap(定位、搜索)需要注意的地方,對(duì)此有興趣的讀者一起學(xué)習(xí)下吧。
    2018-02-02
  • iOS實(shí)現(xiàn)屏幕亮度和閃光燈控制的實(shí)例代碼

    iOS實(shí)現(xiàn)屏幕亮度和閃光燈控制的實(shí)例代碼

    本篇文章主要介紹了iOS實(shí)現(xiàn)屏幕亮度和閃光燈控制的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-06-06
  • iOS實(shí)現(xiàn)調(diào)用QQ客戶端發(fā)起臨時(shí)會(huì)話

    iOS實(shí)現(xiàn)調(diào)用QQ客戶端發(fā)起臨時(shí)會(huì)話

    本篇文章主要給大家詳細(xì)分析了用IOS實(shí)現(xiàn)調(diào)用QQ客戶端發(fā)起臨時(shí)會(huì)話的功能,對(duì)此有需要的朋友收藏分享下。
    2018-02-02
  • Apple?Watch?App?Lifecycle應(yīng)用開發(fā)

    Apple?Watch?App?Lifecycle應(yīng)用開發(fā)

    這篇文章主要為大家介紹了Apple?Watch?App?Lifecycle應(yīng)用開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • iOS關(guān)閉虛擬鍵盤方法匯總

    iOS關(guān)閉虛擬鍵盤方法匯總

    在iOS應(yīng)用開發(fā)中,有三類視圖對(duì)象會(huì)打開虛擬鍵盤,進(jìn)行輸入操作,但如何關(guān)閉虛擬鍵盤,卻沒有提供自動(dòng)化的方法
    2016-04-04
  • IOS 開發(fā)APP之關(guān)于時(shí)間處理詳細(xì)介紹

    IOS 開發(fā)APP之關(guān)于時(shí)間處理詳細(xì)介紹

    這篇文章主要介紹了IOS 開發(fā)APP之關(guān)于時(shí)間處理詳細(xì)介紹的相關(guān)資料,開發(fā)APP 不僅需要對(duì)API的調(diào)用還需要對(duì)時(shí)間相關(guān)的各種API之間的差別,再因場(chǎng)景而異去設(shè)計(jì)相應(yīng)的機(jī)制,需要的朋友可以參考下
    2016-12-12

最新評(píng)論

平湖市| 淮滨县| 平陆县| 云安县| 镇原县| 汉寿县| 四川省| 安阳县| 崇左市| 韶山市| 津市市| 辉南县| 库尔勒市| 太和县| 通河县| 五指山市| 蚌埠市| 丰原市| 开远市| 丰镇市| 平昌县| 集安市| 阳东县| 宽城| 夏邑县| 锡林郭勒盟| 民乐县| 峨眉山市| 上犹县| 德令哈市| 汉川市| 元谋县| 建德市| 冷水江市| 永清县| 汝阳县| 西畴县| 石景山区| 高安市| 兖州市| 都兰县|