欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS自定義UITabBar中間按鈕

 更新時(shí)間:2020年05月26日 15:10:25   作者:--風(fēng)起云涌--  
這篇文章主要為大家詳細(xì)介紹了iOS自定義UITabBar中間按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

iOS自定義UITabBar中間按鈕的具體代碼,供大家參考,具體內(nèi)容如下

自定義YLTbaBar繼承自UITabBar

git地址

YLTbaBar.h

//
// YLTabBar.h
// 自定義tabbar
//
// Created by nyl on 2018/10/15.
// Copyright © 2018年 nieyinlong. All rights reserved.
//
 
#import <UIKit/UIKit.h>
//tab頁面?zhèn)€數(shù)
typedef NS_ENUM(NSInteger, kTbaBarItemUIType) {
 kTbaBarItemUIType_Three = 3,//底部3個(gè)選項(xiàng)
 kTbaBarItemUIType_Five = 5,//底部5個(gè)選項(xiàng)
};
 
@class YLTabBar;
 
@protocol YLTabBarDelegate <NSObject>
 
-(void)tabBar:(YLTabBar *)tabBar clickCenterButton:(UIButton *)sender;
 
@end
 
 
@interface YLTabBar : UITabBar
 
@property (nonatomic, weak) id<YLTabBarDelegate> tabDelegate;
@property (nonatomic, strong) NSString *centerBtnTitle;
@property (nonatomic, strong) NSString *centerBtnIcon;
 
+ (instancetype)instanceCustomTabBarWithType:(kTbaBarItemUIType)type;
 
@end

YLTbaBar.m

//
// YLTabBar.m
// 自定義tabbar
//
// Created by nyl on 2018/10/15.
// Copyright © 2018年 nieyinlong. All rights reserved.
//
 
#import "YLTabBar.h"
 
@interface YLTabBar()
 
@property(nonatomic, strong) UIButton *centerButton;
@property(nonatomic, strong) UILabel *centerTitle;
@property (nonatomic,assign) kTbaBarItemUIType type;
 
@end
 
@implementation YLTabBar
 
+(instancetype)instanceCustomTabBarWithType:(kTbaBarItemUIType)type{
 YLTabBar *tabBar = [[YLTabBar alloc] init];
 tabBar.type = type;
 return tabBar;
}
 
-(instancetype)initWithFrame:(CGRect)frame{
 self = [super initWithFrame:frame];
 if (self) {
 self.translucent = NO;
 UIButton *plusBtn = [UIButton buttonWithType:UIButtonTypeCustom];
 self.centerButton = plusBtn;
 [plusBtn addTarget:self action:@selector(plusBtnDidClick) forControlEvents:UIControlEventTouchUpInside];
 [self addSubview:plusBtn];
 
 UILabel *lblTitle = [[UILabel alloc] init];
 self.centerTitle = lblTitle;
 lblTitle.font = [UIFont systemFontOfSize:10];
 lblTitle.textColor = [UIColor blackColor];
 lblTitle.textAlignment = NSTextAlignmentCenter;
 [self addSubview:lblTitle];
 
 }
 return self;
}
 
-(void)plusBtnDidClick{
 if (self.tabDelegate && [self.tabDelegate respondsToSelector:@selector(tabBar:clickCenterButton:)]) {
 [self.tabDelegate tabBar:self clickCenterButton:self.centerButton];
 }
}
 
 
// 調(diào)整子視圖的布局
-(void)layoutSubviews{
 [super layoutSubviews];
 CGFloat width = self.frame.size.width/self.type;
 Class class = NSClassFromString(@"UITabBarButton");
 for (UIView *view in self.subviews) {
 if ([view isEqual:self.centerTitle]) {//self.centerButton
  view.frame = CGRectMake(0, 0, width, 15);
  view.center = CGPointMake(self.frame.size.width/2, self.frame.size.height - view.frame.size.height + 8);
 }else if ([view isEqual:self.centerButton]) {//self.centerButton
  view.frame = CGRectMake(0, 0, width, self.frame.size.height);
  [view sizeToFit];
  view.center = CGPointMake(self.frame.size.width/2, 10);
 }else if ([view isKindOfClass:class]){//system button
  CGRect frame = view.frame;
  int indexFromOrign = view.frame.origin.x/width;//防止UIView *view in self.subviews 獲取到的不是有序的
  if (indexFromOrign >= (self.type - 1) / 2) {
  indexFromOrign++;
  }
  CGFloat x = indexFromOrign * width;
  //如果是系統(tǒng)的UITabBarButton,那么就調(diào)整子控件位置,空出中間位置
  view.frame = CGRectMake(x, view.frame.origin.y, width, frame.size.height);
  
  //調(diào)整badge postion
  for (UIView *badgeView in view.subviews){
  NSString *className = NSStringFromClass([badgeView class]);
  // Looking for _UIBadgeView
  if ([className rangeOfString:@"BadgeView"].location != NSNotFound){
   badgeView.layer.transform = CATransform3DIdentity;
   badgeView.layer.transform = CATransform3DMakeTranslation(-17.0, 1.0, 1.0);
   break;
  }
  }
 }
 }
}
 
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
 //這一個(gè)判斷是關(guān)鍵,不判斷的話push到其他頁面,點(diǎn)擊發(fā)布按鈕的位置也是會(huì)有反應(yīng)的,這樣就不好了
 //self.isHidden == NO 說明當(dāng)前頁面是有tabbar的,那么肯定是在導(dǎo)航控制器的根控制器頁面
 //在導(dǎo)航控制器根控制器頁面,那么我們就需要判斷手指點(diǎn)擊的位置是否在發(fā)布按鈕身上
 //是的話讓發(fā)布按鈕自己處理點(diǎn)擊事件,不是的話讓系統(tǒng)去處理點(diǎn)擊事件就可以了
 if (self.isHidden == NO) {
 //將當(dāng)前tabbar的觸摸點(diǎn)轉(zhuǎn)換坐標(biāo)系,轉(zhuǎn)換到發(fā)布按鈕的身上,生成一個(gè)新的點(diǎn)
 CGPoint newP = [self convertPoint:point toView:self.centerButton];
 
 //判斷如果這個(gè)新的點(diǎn)是在發(fā)布按鈕身上,那么處理點(diǎn)擊事件最合適的view就是發(fā)布按鈕
 if ( [self.centerButton pointInside:newP withEvent:event]) {
  return self.centerButton;
 }else{//如果點(diǎn)不在發(fā)布按鈕身上,直接讓系統(tǒng)處理就可以了
  return [super hitTest:point withEvent:event];
 }
 }
 else {//tabbar隱藏了,那么說明已經(jīng)push到其他的頁面了,這個(gè)時(shí)候還是讓系統(tǒng)去判斷最合適的view處理就好了
 return [super hitTest:point withEvent:event];
 }
}
 
-(void)setCenterBtnIcon:(NSString *)centerBtnIcon{
 _centerBtnIcon = centerBtnIcon;
 [self.centerButton setBackgroundImage:[UIImage imageNamed:self.centerBtnIcon] forState:UIControlStateNormal];
 [self.centerButton setBackgroundImage:[UIImage imageNamed:self.centerBtnIcon] forState:UIControlStateHighlighted];
}
 
-(void)setCenterBtnTitle:(NSString *)centerBtnTitle{
 _centerBtnTitle = centerBtnTitle;
 self.centerTitle.text = centerBtnTitle;
}
 
 
@end

在UITabBarController中使用 

// viewDidLoda中, KVO形式添加
[self setValue:self.ylTabBar forKey:@"tabBar"];
 
- (YLTabBar *)ylTabBar {
 if (!_ylTabBar) {
 _ylTabBar = [YLTabBar instanceCustomTabBarWithType:kTbaBarItemUIType_Five];
 _ylTabBar.centerBtnIcon = @"centerIcon";
 _ylTabBar.tabDelegate = self;
 }
 return _ylTabBar;
}

YLTabBarDelegate

-(void)tabBar:(YLTabBar *)tabBar clickCenterButton:(UIButton *)sender{
 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"點(diǎn)擊了中間按鈕" preferredStyle:UIAlertControllerStyleAlert];
 UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
 
 // TODO
 }];
 [alert addAction:action];
 [self presentViewController:alert animated:YES completion:nil];
}

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

相關(guān)文章

  • iOS Tabbar中間添加凸起可旋轉(zhuǎn)按鈕功能

    iOS Tabbar中間添加凸起可旋轉(zhuǎn)按鈕功能

    最近的項(xiàng)目中有需求在tabbar中間添加凸起按鈕,并且點(diǎn)擊時(shí)按鈕要旋轉(zhuǎn),看了仿斗魚的凸起,點(diǎn)擊后是present出來View,這篇文章主要介紹了iOS Tabbar中間添加凸起可旋轉(zhuǎn)按鈕,需要的朋友可以參考下
    2017-12-12
  • iOS中日志同步獲取NSLog重定向以及其他詳解

    iOS中日志同步獲取NSLog重定向以及其他詳解

    在Objective-c開發(fā)程序的時(shí)候,有專門的日志操作類NSLog,它將指定的輸出,輸出到(stderr),我們可以利用Xcode的日志輸出窗口,下面這篇文章主要給大家介紹了關(guān)于iOS中日志同步獲取NSLog重定向以及其他的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • iOS實(shí)現(xiàn)搭建聊天頁面的實(shí)例代碼

    iOS實(shí)現(xiàn)搭建聊天頁面的實(shí)例代碼

    本篇文章主要介紹了iOS實(shí)現(xiàn)搭建聊天頁面的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • iOS使用UICollectionView實(shí)現(xiàn)橫向滾動(dòng)照片效果

    iOS使用UICollectionView實(shí)現(xiàn)橫向滾動(dòng)照片效果

    這篇文章主要為大家詳細(xì)介紹了iOS使用UICollectionView實(shí)現(xiàn)橫向滾動(dòng)照片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • iOS中NSObject的兩種含義:類和協(xié)議詳解

    iOS中NSObject的兩種含義:類和協(xié)議詳解

    這篇文章主要給大家介紹了關(guān)于iOS中NSObject的兩種含義:類和協(xié)議的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • iOS實(shí)現(xiàn)點(diǎn)擊微信頭像(放大、縮放、保存)效果

    iOS實(shí)現(xiàn)點(diǎn)擊微信頭像(放大、縮放、保存)效果

    最近公司產(chǎn)品需要實(shí)現(xiàn)點(diǎn)擊個(gè)人主頁頭像可以放大頭像、縮放頭像、保存頭像效果(和點(diǎn)擊微信個(gè)人頭像類似),故找個(gè)時(shí)間實(shí)現(xiàn)一下,記錄下來,供自己查看也給有需要的大家做個(gè)參考。下面來一起看看吧。
    2017-03-03
  • iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

    iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

    這篇文章主要介紹了iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • iOS實(shí)現(xiàn)單元格折疊

    iOS實(shí)現(xiàn)單元格折疊

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)單元格折疊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • iOS快速實(shí)現(xiàn)環(huán)形漸變進(jìn)度條

    iOS快速實(shí)現(xiàn)環(huán)形漸變進(jìn)度條

    之前看到很多環(huán)形進(jìn)度條,看上去很酷,然后就試著學(xué)習(xí)他們的代碼,結(jié)果發(fā)現(xiàn)實(shí)現(xiàn)一個(gè)環(huán)形進(jìn)度條一點(diǎn)也不簡(jiǎn)單。我就在想一個(gè)簡(jiǎn)單的進(jìn)度條有這么復(fù)雜嗎?自己摸索后,有一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方法?,F(xiàn)在分享給大家,有需要的朋友們可以參考借鑒。
    2016-10-10
  • iOS runtime forwardInvocation詳解及整理

    iOS runtime forwardInvocation詳解及整理

    這篇文章主要介紹了 iOS runtime forwardInvocation詳解及整理的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評(píng)論