ios定制中间突出的tabBar

先展示效果图:


这个tabBar纠结了我好久,最后通过查询资料各种百度谷歌终于找到一个比较符合我们需求的案例,下面展示出代码供各位参考

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @interface BaseTabBarViewController ()<UITabBarControllerDelegate>  
  2. @property (nonatomic,strong)UIButton *button;  
  3. @end  
  4.   
  5. @implementation BaseTabBarViewController  
  6. @synthesize button;  
  7. #pragma mark- setup  
  8. -(void)setup  
  9. {  
  10.     //  添加突出按钮  
  11.     [self addCenterButtonWithImage:[UIImage imageNamed:@"我的钱"] selectedImage:[UIImage imageNamed:@"我的钱"]];  
  12.     //  UITabBarControllerDelegate 指定为自己  
  13.     self.delegate=self;  
  14.     //  指定当前页——中间页  
  15.     //self.selectedIndex=0;  
  16.     //  设点button状态  
  17.     //button.selected=YES;  
  18.     //  设定其他item点击选中颜色  
  19.    
  20. }  
  21. #pragma mark - addCenterButton  
  22. // Create a custom UIButton and add it to the center of our tab bar  
  23. -(void) addCenterButtonWithImage:(UIImage*)buttonImage selectedImage:(UIImage*)selectedImage  
  24. {  
  25.     button = [UIButton buttonWithType:UIButtonTypeCustom];  
  26.     [button addTarget:self action:@selector(pressChange:) forControlEvents:UIControlEventTouchUpInside];  
  27.     button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;  
  28.       
  29.     //  设定button大小为适应图片  
  30.     button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);  
  31.     [button setImage:buttonImage forState:UIControlStateNormal];  
  32.     [button setImage:selectedImage forState:UIControlStateSelected];  
  33.       
  34.     //  这个比较恶心  去掉选中button时候的阴影  
  35.     button.adjustsImageWhenHighlighted=NO;  
  36.     /*  
  37.      *  核心代码:设置button的center 和 tabBar的 center 做对齐操作, 同时做出相对的上浮  
  38.      */  
  39.         CGPoint center = self.tabBar.center;  
  40.         center.y = center.y - buttonImage.size.height/4;  
  41.         button.center = center;  
  42.     [self.view addSubview:button];  
  43. }  
  44.   
  45. -(void)pressChange:(id)sender  
  46. {  
  47.     self.selectedIndex=1;  
  48.     button.selected=YES;  
  49. }  
  50.   
  51. #pragma mark- TabBar Delegate  
  52.   
  53. //  换页和button的状态关联上  
  54.   
  55. - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController  
  56. {  
  57.     if (self.selectedIndex==1) {  
  58.         button.selected=YES;  
  59.     }else  
  60.     {  
  61.         button.selected=NO;  
  62.     }  
  63. }  
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @interface BaseTabBarViewController ()<UITabBarControllerDelegate>  
  2. @property (nonatomic,strong)UIButton *button;  
  3. @end  
  4.   
  5. @implementation BaseTabBarViewController  
  6. @synthesize button;  
  7. #pragma mark- setup  
  8. -(void)setup  
  9. {  
  10.     //  添加突出按钮  
  11.     [self addCenterButtonWithImage:[UIImage imageNamed:@"我的钱"] selectedImage:[UIImage imageNamed:@"我的钱"]];  
  12.     //  UITabBarControllerDelegate 指定为自己  
  13.     self.delegate=self;  
  14.     //  指定当前页——中间页  
  15.     //self.selectedIndex=0;  
  16.     //  设点button状态  
  17.     //button.selected=YES;  
  18.     //  设定其他item点击选中颜色  
  19.    
  20. }  
  21. #pragma mark - addCenterButton  
  22. // Create a custom UIButton and add it to the center of our tab bar  
  23. -(void) addCenterButtonWithImage:(UIImage*)buttonImage selectedImage:(UIImage*)selectedImage  
  24. {  
  25.     button = [UIButton buttonWithType:UIButtonTypeCustom];  
  26.     [button addTarget:self action:@selector(pressChange:) forControlEvents:UIControlEventTouchUpInside];  
  27.     button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;  
  28.       
  29.     //  设定button大小为适应图片  
  30.     button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);  
  31.     [button setImage:buttonImage forState:UIControlStateNormal];  
  32.     [button setImage:selectedImage forState:UIControlStateSelected];  
  33.       
  34.     //  这个比较恶心  去掉选中button时候的阴影  
  35.     button.adjustsImageWhenHighlighted=NO;  
  36.     /*  
  37.      *  核心代码:设置button的center 和 tabBar的 center 做对齐操作, 同时做出相对的上浮  
  38.      */  
  39.         CGPoint center = self.tabBar.center;  
  40.         center.y = center.y - buttonImage.size.height/4;  
  41.         button.center = center;  
  42.     [self.view addSubview:button];  
  43. }  
  44.   
  45. -(void)pressChange:(id)sender  
  46. {  
  47.     self.selectedIndex=1;  
  48.     button.selected=YES;  
  49. }  
  50.   
  51. #pragma mark- TabBar Delegate  
  52.   
  53. //  换页和button的状态关联上  
  54.   
  55. - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController  
  56. {  
  57.     if (self.selectedIndex==1) {  
  58.         button.selected=YES;  
  59.     }else  
  60.     {  
  61.         button.selected=NO;  
  62.     }  
  63. }  

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     [self setTabBarVC];  
  4.     [self setup];  
  5.     [self addButtonNotifation];  
  6.     self.tabBar.barTintColor = [UIColor whiteColor];  
  7. }  
  8. //添加大圆按钮的通知  
  9. -(void)addButtonNotifation{  
  10.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(buttonHidden) name:@"buttonNotifationCenter" object:nil];  
  11.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(buttonNotHidden) name:@"buttonNotHidden" object:nil];  
  12. }  
  13. -(void)buttonNotHidden{  
  14.     button.hidden=NO;  
  15. }  
  16. -(void)buttonHidden{  
  17.     button.hidden=YES;  
  18. }  
  19. // 初始化所有子控制器  
  20. - (void)setTabBarVC{  
  21.     [self setTabBarChildController:[[SelectionViewController alloc] init] title:@"每月送" image:@"每月送" selectImage:@"每月送选中"];  
  22.   
  23.     [self setTabBarChildController:[[MyMoneyViewController alloc] init] title:@"我的钱" image:@"" selectImage:@""];  
  24.       
  25.     [self setTabBarChildController:[[MainViewController alloc] init] title:@"个人中心" image:@"个人中心" selectImage:@"个人中心选中"];  
  26. }  
  27.   
  28.   
  29. // 添加tabbar的子viewcontroller  
  30. - (void)setTabBarChildController:(UIViewController*)controller title:(NSString*)title image:(NSString*)imageStr selectImage:(NSString*)selectImageStr{  
  31.       
  32.     UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:controller];  
  33.     nav.tabBarItem.title = title;  
  34.       
  35.     nav.tabBarItem.image = [[UIImage imageNamed:imageStr]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  36.       
  37.     nav.tabBarItem.selectedImage = [[UIImage imageNamed:selectImageStr]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  38.       
  39.     [nav.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10],NSForegroundColorAttributeName:RGBA(7474741.0)} forState:UIControlStateNormal];  
  40.     [nav.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10],NSForegroundColorAttributeName:RGBA(25520001.0)} forState:UIControlStateSelected];  
  41.       
  42.     [self addChildViewController:nav];  
  43. }  
[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     [self setTabBarVC];  
  4.     [self setup];  
  5.     [self addButtonNotifation];  
  6.     self.tabBar.barTintColor = [UIColor whiteColor];  
  7. }  
  8. //添加大圆按钮的通知  
  9. -(void)addButtonNotifation{  
  10.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(buttonHidden) name:@"buttonNotifationCenter" object:nil];  
  11.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(buttonNotHidden) name:@"buttonNotHidden" object:nil];  
  12. }  
  13. -(void)buttonNotHidden{  
  14.     button.hidden=NO;  
  15. }  
  16. -(void)buttonHidden{  
  17.     button.hidden=YES;  
  18. }  
  19. // 初始化所有子控制器  
  20. - (void)setTabBarVC{  
  21.     [self setTabBarChildController:[[SelectionViewController alloc] init] title:@"每月送" image:@"每月送" selectImage:@"每月送选中"];  
  22.   
  23.     [self setTabBarChildController:[[MyMoneyViewController alloc] init] title:@"我的钱" image:@"" selectImage:@""];  
  24.       
  25.     [self setTabBarChildController:[[MainViewController alloc] init] title:@"个人中心" image:@"个人中心" selectImage:@"个人中心选中"];  
  26. }  
  27.   
  28.   
  29. // 添加tabbar的子viewcontroller  
  30. - (void)setTabBarChildController:(UIViewController*)controller title:(NSString*)title image:(NSString*)imageStr selectImage:(NSString*)selectImageStr{  
  31.       
  32.     UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:controller];  
  33.     nav.tabBarItem.title = title;  
  34.       
  35.     nav.tabBarItem.image = [[UIImage imageNamed:imageStr]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  36.       
  37.     nav.tabBarItem.selectedImage = [[UIImage imageNamed:selectImageStr]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  38.       
  39.     [nav.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10],NSForegroundColorAttributeName:RGBA(7474741.0)} forState:UIControlStateNormal];  
  40.     [nav.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10],NSForegroundColorAttributeName:RGBA(25520001.0)} forState:UIControlStateSelected];  
  41.       
  42.     [self addChildViewController:nav];  
  43. }  

tabBar的颜色各位可以用一张白色的图片做背景

关于那个隐藏大圆按钮的通知,我发现导航推进下一页的时候那个大圆按钮不会消失,我就只好用了一个通知控制隐藏和显示

如果各位有更好的方法也希望能够告知,共同进步

代码下载地址http://download.csdn.net/detail/shan1991fei/9557471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值