| 需要實(shí)現(xiàn)的效果(參考 百思不得姐)
中間的UITabBarButton 沒(méi)有對(duì)應(yīng)的UIViewContrller. 所以需要重新布局.
實(shí)現(xiàn)的效果.png
自定義了一個(gè)RootViewController(YYRootTabBarController 其繼承自UITabBarController )
#import "AppDelegate.h"
#import "YYRootTabBarController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = [[YYRootTabBarController alloc]init];
[self.window makeKeyAndVisible];
return YES;
}
...
YYRootTabBarController.h 文件
#import <UIKit/UIKit.h>
@interface YYRootTabBarController : UITabBarController
@end
YYRootTabBarController.m 文件
#import "YYRootTabBarController.h"
#import "YYFirstViewController.h"
#import "YYSecondViewController.h"
#import "YYThirdViewController.h"
#import "YYFourViewController.h"
#import "YYTabBar.h"
@interface YYRootTabBarController ()
@end
@implementation YYRootTabBarController
- (void)viewDidLoad {
[super viewDidLoad];
// 設(shè)置應(yīng)用程序中所有的UITabBarItem 的屬性
UITabBarItem *item = [UITabBarItem appearance]; // 認(rèn)為是一個(gè)皮膚
// 屬性字典
NSDictionary *normalDic = @{NSFontAttributeName:[UIFont systemFontOfSize:12],
NSForegroundColorAttributeName:[UIColor grayColor]
};
NSDictionary *selectedDic = @{NSForegroundColorAttributeName:[UIColor darkGrayColor]
};
[item setTitleTextAttributes:normalDic forState:UIControlStateNormal];
[item setTitleTextAttributes:selectedDic forState:UIControlStateSelected];
YYTabBar *tabBar = [[YYTabBar alloc]init];
[self setValue:tabBar forKey:@"tabBar"];
//初始化我們的自控制器
[self setUpChildVC];
}
- (void)setUpChildVC{
// 第一個(gè)
[self setUpChildViewController:[[YYFirstViewController alloc] init] title:@"首頁(yè)" normalImageName:@"" selectedImageName:@""];
// 第二個(gè)
[self setUpChildViewController:[[YYSecondViewController alloc] init] title:@"發(fā)現(xiàn)" normalImageName:@"" selectedImageName:@""];
// 第三個(gè)
[self setUpChildViewController:[[YYThirdViewController alloc] init] title:@"搜索" normalImageName:@"" selectedImageName:@""];
// 第四個(gè)
[self setUpChildViewController:[[YYFourViewController alloc] init] title:@"我的" normalImageName:@"" selectedImageName:@""];
}
// 添加自控制器 如果需要 UINavigationController 可以在這里添加
- (void)setUpChildViewController:(UIViewController *)vc title:(NSString *)title normalImageName:(NSString *)normalImageName selectedImageName:(NSString *)selectedImageName{
UINavigationController *NAV = [[UINavigationController alloc]initWithRootViewController:vc
];
vc.tabBarItem.title = title;
vc.tabBarItem.image = [UIImage imageNamed:normalImageName]; // 防止圖片使用系統(tǒng)默認(rèn)顏色 [[UIImage imageNamed:@""] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImageName]; // 防止圖片使用系統(tǒng)默認(rèn)顏色 [[UIImage imageNamed:@""] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[self addChildViewController:NAV];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
YYTabBar.h 文件
#import <UIKit/UIKit.h>
@interface YYTabBar : UITabBar
@end
YYTabBar.m 文件
#import "YYTabBar.h"
@interface YYTabBar()
@property (nonatomic, weak) UIButton *plushBtn; // 中間紅的的加號(hào)
@end
@implementation YYTabBar
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
// 設(shè)置背景圖片
self.backgroundImage = [UIImage imageNamed:@""];
// 初始化操作
UIButton *plushBtn = [[UIButton alloc]init];
[plushBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[plushBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateHighlighted];
self.plushBtn = plushBtn;
[self addSubview:plushBtn];
}
return self;
}
//布局子空間
- (void)layoutSubviews{
[super layoutSubviews];
self.plushBtn.bounds = CGRectMake(0, 0, self.plushBtn.currentBackgroundImage.size.width, self.plushBtn.currentBackgroundImage.size.height); // 以背景圖片的大小設(shè)置按鈕的大小
self.plushBtn.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5); // 應(yīng)該等價(jià)于 self.plushBtn.center = self.center;
// 布局UItabBarButton
int index = 0;
CGFloat W = self.frame.size.width * 0.2; // 一共 5 個(gè) 評(píng)分, 所有每個(gè)占 0.2
CGFloat H = self.frame.size.height;
CGFloat Y = 0;
for (UIView * view in self.subviews) {
Class class = NSClassFromString(@"UITabBarButton");
if ([view isKindOfClass:class]) {
CGFloat X = W * ((index == 2) ? ++index : index); // 跳過(guò)當(dāng)中的那一個(gè)
view.frame = CGRectMake(X, Y, W, H);
index ++;
}
}
}
@end
補(bǔ)充: 1.其中圖片的名稱沒(méi)有補(bǔ)全
2.如果有什么問(wèn)題, 可以私信