//.h#import#define ScrollWidht self.view.bounds.size.width#define ScrollHight self.view.bounds.size.height#define CustomTabBarHight 49#define ImageWidth 30#define ImageHight 30#define ImageNumber 4@interface MyTabBarViewController : UITabBarController@property (assign,readwrite,nonatomic)UIView * selectionIndicatorImage;@end
//.m#import "MyTabBarViewController.h"#import "FristViewController.h"#import "SecondViewController.h"#import "ThridViewController.h"#import "FouthViewController.h"@interface MyTabBarViewController (){ UIButton * resetButton;}@end@implementation MyTabBarViewController- (instancetype)init{ self = [super init]; if (self) { } return self;}- (void)viewDidLoad{ [super viewDidLoad]; [self createViewControlls]; [self createTabBar];}- (UINavigationController *)createNavigationControllerWithVCClassName:(NSString * )className{ Class vcClass = NSClassFromString(className); UIViewController * vcClassName = [[vcClass alloc]init]; return [[UINavigationController alloc]initWithRootViewController:vcClassName];}- (void)createViewControlls{ NSArray * arrayOfClass = @[@"FristViewController",@"SecondViewController",@"ThridViewController",@"FouthViewController"]; NSMutableArray * vcArray = [[NSMutableArray alloc]init]; for (int i = 0; i < arrayOfClass.count; i++) { UINavigationController * nav = [self createNavigationControllerWithVCClassName:arrayOfClass[i]]; [vcArray addObject:nav]; } self.viewControllers = vcArray;}- (void)createTabBar{ self.tabBar.hidden = YES; UIImageView * customtabBarView = [[UIImageView alloc]init]; //customtabBarView.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.8]; customtabBarView.backgroundColor = [UIColor whiteColor]; customtabBarView.alpha = 0.8; customtabBarView.userInteractionEnabled = YES; float customtabBarViewX = 0; float customtabBarViewY = ScrollHight - CustomTabBarHight; customtabBarView.frame = CGRectMake(customtabBarViewX, customtabBarViewY, ScrollWidht, CustomTabBarHight); [self.view addSubview:customtabBarView]; float btnSpace = (ScrollWidht - ImageWidth*ImageNumber)/5.0; float btnY = (CustomTabBarHight - ImageHight)/2.0; for (int i = 0; i < ImageNumber; i++) { UIButton * btn = [UIButton buttonWithType:UIButtonTypeSystem]; float btnX = btnSpace + (btnSpace + ImageWidth)*i; btn.frame = CGRectMake(btnX, btnY, ImageWidth, ImageHight); btn.tag = 100+i; [btn setBackgroundImage:[UIImage p_w_picpathNamed:[NSString stringWithFormat:@"tab_%d.png",i]] forState:UIControlStateNormal]; [btn setBackgroundImage:[UIImage p_w_picpathNamed:[NSString stringWithFormat:@"tab_c%d.png",i]] forState:UIControlStateSelected]; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; if (i == 0) { btn.selected = YES; resetButton = btn; _selectionIndicatorImage = [self setSelectedImage]; _selectionIndicatorImage.frame = btn.frame; [customtabBarView addSubview:_selectionIndicatorImage]; } [customtabBarView addSubview:btn]; }}- (UIView *)setSelectedImage{ static UIView * view = nil; if (!view) { view = [[UIView alloc]init]; view.backgroundColor = [UIColor orangeColor]; } return view;}- (void)btnClick:(UIButton *)btn{ resetButton.selected = NO; resetButton = btn; btn.selected = YES; CGPoint centerOfselectionIndicatorImage = btn.center; [UIView animateWithDuration:0.25 animations:^{ _selectionIndicatorImage.center = centerOfselectionIndicatorImage; }]; self.selectedIndex = btn.tag - 100;}@end
总结:使用预定义使得代码具有可扩展性,编程过程中.m文件尽量避免出现数字,命名一定要规范,条理要清晰!