国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

自定義TabBar

2019-11-14 18:16:37
字體:
來源:轉載
供稿:網友

  在現階IOS開發的樣式越來越多,有些系統自帶的東西我們無法滿足業務的需求,因此我們需要根據自己的需求對當前所用的到技術自定義,只有靈活的自己封裝自己定義才能讓你的代碼更具有靈活性,下面我們以一個自定義的tabbar為例子講解,一起封裝一個Tabcontroller。

  分析:我們要完成一個tabbarcontroller首先我們需要跟蘋果提供的一樣,需要一個tabbar視圖,也就是工具條用來點擊用,然后我們需要排列在tabbar上面的tabbarItem,下面我們就根據蘋果提供的方式分別定義如下類

1、JRTabBar類內容如下

/** 接受傳過來的item標題和圖片*/@PRoperty(nonatomic,strong) NSArray *  itemArray;@property(nonatomic,weak) id<JRTabBarProtocol> delegate;-(instancetype)initWithFrame:(CGRect)frame andItems:(NSArray *) arr#pragma mark - 增加item- (void)addItems{    CGFloat space =(kWidth-2*kEdgeMargin-self.itemArray.count*40)/(self.itemArray.count-1);            for (int i=0;i<self.itemArray.count;i++) {       JRItem *item= [[[NSBundle mainBundle] loadNibNamed:@"jritem" owner:nil options:nil] firstObject];        item.tag=100+i;                //1 初始化item                JRItemModel * model=self.itemArray[i];        item.imageView.image=model.image;        item.label.text=model.title;                //2 修改坐標        CGRect frame=item.frame;        frame.origin.x=kEdgeMargin+i*(space+40);        item.frame=frame;                //3加入tabbar        [self addSubview:item];                   //增加點擊手勢        UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(showInfo:)];        [item addGestureRecognizer:tap];                  }}

 效果圖如下:

2、針對JRItem我們先通過xib創業出來,然后定義相應的類并且連接輸出口如下圖所示

3、然后我們需要根據蘋果一樣定義一個容器來存放將要展示和所有控制器和我們需要的展示的tabItem,這里我們取名為JRTabBarConroller。

3.1首先我們需要為當前的控制器添加tabbar

pragma mark - 添加tabbar- (void) _setUpTabbar{            JRTabBar * tab=[[JRTabBar alloc] initWithFrame:CGRectMake(0, kHeight-49,kWidth , 49) andItems:self.items];    tab.delegate=self;    [self.view addSubview:tab];        //控制tabbar隱藏    tab.hidden=self.hiddenTabBar;       }

3.2首先我們將需要傳入的控制器展示出來

//設置視圖控制器- (void)_setUpSelectController:(NSInteger) index{    //如果重復點擊,取消操作    UIViewController * vc=self.viewControllers[index];    if(self.currentVC==vc)return;            //第一次不進行動畫    if(self.currentVC==nil){        [self.view addSubview:vc.view];        self.currentVC=vc;    }else{     //第二次開始加載動畫        //將當前的視圖移動到屏幕的最邊緣位置,然后在動畫慢慢的拉回來從而達到翻頁效果     [self.view insertSubview:vc.view aboveSubview:self.currentVC.view];        vc.view.transform=CGAffineTransformMakeTranslation(kWidth, 0);        [UIView animateWithDuration:0.5 animations:^{            vc.view.transform=CGAffineTransformIdentity;                    } completion:^(BOOL finished) {            [self.currentVC.view removeFromSuperview];            self.currentVC=vc;        }];    } }

3.3然后我們需要切換控制器

#pragma mark - JRTabBarProtocol- (void)changeVC:(NSInteger)index{    NSInteger tag=index-100;           //  重新切換控制器    [self _setUpSelectController:tag];

3.4這樣我們就大功告成了,然后我們需要對外提供接口

/** 定義一個數組,用來存放視圖控制器*/@property(nonatomic,strong) NSArray * viewControllers;/** 定義一個數組,用來存放Item*/@property(nonatomic,strong) NSArray * items;/** 選中索引*/@property(nonatomic,assign) NSInteger selectedIndex;@property(nonatomic,assign) BOOL hiddenTabBar;

3.5有了這些接口我們在外面調用即可

//初始化控制器    //1    UIViewController * vc1=[[UIViewController alloc] init];    vc1.view.backgroundColor=[UIColor redColor];    //2    UIViewController * vc2=[[UIViewController alloc] init];    vc2.view.backgroundColor=[UIColor greenColor];    //3    UIViewController * vc3=[[UIViewController alloc] init];    vc3.view.backgroundColor=[UIColor orangeColor];    //4    UIViewController * vc4=[[UIViewController alloc] init];    vc4.view.backgroundColor=[UIColor blueColor];            //初始化item        JRItemModel * item1=[[JRItemModel alloc] initWithTitle:@"tab1" andImage:[UIImage imageNamed:@"tabbar_cate"]];        JRItemModel * item2=[[JRItemModel alloc] initWithTitle:@"tab2" andImage:[UIImage imageNamed:@"tabbar_fov"]];        JRItemModel * item3=[[JRItemModel alloc] initWithTitle:@"tab3" andImage:[UIImage imageNamed:@"tabbar_home"]];        JRItemModel * item4=[[JRItemModel alloc] initWithTitle:@"tab4" andImage:[UIImage imageNamed:@"tabbar_search"]];                JRTabBarConroller * tab=[[JRTabBarConroller alloc] init];    tab.viewControllers=@[vc1,vc2,vc3,vc4];    tab.items=@[item1,item2,item3,item4];//  tab.hiddenTabBar=NO;        self.window.rootViewController=tab;

 

  想要了解更多內容的小伙伴,可以點擊查看源碼,親自運行測試。

  疑問咨詢或技術交流,請加入官方QQ群:JRedu技術交流 (452379712)

 

作者:杰瑞教育
出處:http://www.survivalescaperooms.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新沂市| 黎平县| 台北县| 沂南县| 尖扎县| 合江县| 南靖县| 靖安县| 汾西县| 呼图壁县| 南平市| 乌拉特前旗| 武胜县| 安丘市| 旅游| 桐城市| 北安市| 黄骅市| 广灵县| 东山县| 麻栗坡县| 边坝县| 诏安县| 历史| 柳江县| 潼南县| 云林县| 监利县| 太白县| 松原市| 奉化市| 育儿| 宁晋县| 石楼县| 罗江县| 锦州市| 通海县| 奉新县| 永顺县| 明水县| 嫩江县|