您的位置:首页 > 产品设计 > UI/UE

自己定义UITabBarController

2015-12-29 18:15 471 查看
近期发现一款和糗百差点儿相同的应用叫<逗乐玩>,它的底部标签栏的效果不错,于是动手写了下,以下给出详细代码演示样例.

#pragma mark - 自己定义UITabBar
- (void)createCustomTabBarView{

_backGroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, ScreenHeight - tab_hight, ScreenWidth, tab_hight)];
_backGroundImageView.image = [UIImage imageNamed:@"nav"];
_backGroundImageView.userInteractionEnabled = YES;
[self.view addSubview:_backGroundImageView];
[_backGroundImageView release];

_selectImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -5, tabitem_width , tab_hight+5)];
_selectImageView.image = [UIImage imageNamed:@"nav_btn"];
[_backGroundImageView addSubview:_selectImageView];
[_selectImageView release];

#pragma mark first标签
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(27, 21, img_width, img_hight)];
_nameLabel.text = @"段子";
_nameLabel.font = [UIFont systemFontOfSize:12.0];
_nameLabel.textColor = [UIColor whiteColor];
_buttonImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"paper"] highlightedImage:[UIImage imageNamed:@"paperH"]];
_buttonImageView.highlighted = YES;
_buttonImageView.frame = CGRectMake(img_x, img_y, img_width, img_hight);
_firstButton = [UIButton buttonWithType:UIButtonTypeCustom];
_firstButton.frame = CGRectMake(tabitem_width * 0, other_offtop, tabitem_width, tabitem_hight);
_firstButton.tag = 0 + TAG;
[_firstButton addTarget:self action:@selector(didClickButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_firstButton addSubview:_buttonImageView];
[_firstButton addSubview:_nameLabel];
[_buttonImageView release];
[_nameLabel release];

#pragma mark second标签
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(27, 21, img_width, img_hight)];
_nameLabel.text = @"图片";
_nameLabel.font = [UIFont systemFontOfSize:12.0];
_nameLabel.textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
_buttonImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2image"] highlightedImage:[UIImage imageNamed:@"2imageH"]];
_buttonImageView.frame = CGRectMake(img_x, img_y, img_width, img_hight);
_secondButton = [UIButton buttonWithType:UIButtonTypeCustom];
_secondButton.frame = CGRectMake(tabitem_width * 1, other_offtop, tabitem_width, tabitem_hight);
_secondButton.tag = 1 + TAG;
[_secondButton addTarget:self action:@selector(didClickButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_secondButton addSubview:_buttonImageView];
[_secondButton addSubview:_nameLabel];
[_buttonImageView release];
[_nameLabel release];

#pragma mark third标签
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(27, 21, img_width, img_hight)];
_nameLabel.text = @"视频";
_nameLabel.font = [UIFont systemFontOfSize:12.0];
_nameLabel.textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
_buttonImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"video"] highlightedImage:[UIImage imageNamed:@"videoH"]];
_buttonImageView.frame = CGRectMake(img_x, img_y, img_width, img_hight);
_thirdButton = [UIButton buttonWithType:UIButtonTypeCustom];
_thirdButton.frame = CGRectMake(tabitem_width * 2, other_offtop, tabitem_width, tabitem_hight);
_thirdButton.tag = 2 + TAG;
[_thirdButton addTarget:self action:@selector(didClickButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_thirdButton addSubview:_buttonImageView];
[_thirdButton addSubview:_nameLabel];
[_buttonImageView release];
[_nameLabel release];

#pragma mark fourth标签
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(14, 21, 50, img_hight)];
_nameLabel.text = @"个人中心";
_nameLabel.font = [UIFont systemFontOfSize:12.0];
_nameLabel.textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
_buttonImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"person"] highlightedImage:[UIImage imageNamed:@"personH"]];
_buttonImageView.frame = CGRectMake(img_x, img_y, img_width, img_hight);
_fourthButton = [UIButton buttonWithType:UIButtonTypeCustom];
_fourthButton.frame = CGRectMake(tabitem_width * 3, other_offtop, tabitem_width, tabitem_hight);
_fourthButton.tag = 3 + TAG;
[_fourthButton addTarget:self action:@selector(didClickButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_fourthButton addSubview:_buttonImageView];
[_fourthButton addSubview:_nameLabel];
[_buttonImageView release];
[_nameLabel release];

[_backGroundImageView addSubview:_firstButton];
[_backGroundImageView addSubview:_secondButton];
[_backGroundImageView addSubview:_thirdButton];
[_backGroundImageView addSubview:_fourthButton];

}

#pragma mark - 点击按钮响应方法
- (void)didClickButtonAction:(id)sender{

UIButton * button = (UIButton *)sender;
self.selectedIndex = button.tag;

[self moveSelectImageView:button];
[self imgAnimate:button];

if (_firstButton.tag != button.tag) {

((UIImageView *)_firstButton.subviews[0]).highlighted = NO;
((UILabel *)_firstButton.subviews[1]).textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
}

if (_secondButton.tag != button.tag) {

((UIImageView *)_secondButton.subviews[0]).highlighted = NO;
((UILabel *)_secondButton.subviews[1]).textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
}

if (_thirdButton.tag != button.tag) {

((UIImageView *)_thirdButton.subviews[0]).highlighted = NO;
((UILabel *)_thirdButton.subviews[1]).textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
}

if (_fourthButton.tag != button.tag) {

((UIImageView *)_fourthButton.subviews[0]).highlighted = NO;
((UILabel *)_fourthButton.subviews[1]).textColor = [UIColor colorWithRed:201/255.0 green:187/255.0 blue:182/255.0 alpha:1.0];
}

((UIImageView *)button.subviews[0]).highlighted = YES;
((UILabel *)button.subviews[1]).textColor = [UIColor whiteColor];

}

#pragma mark - 图片滑动动画
//  selectImageView和btn是并列载入在view上的关系,一个先加一个后加,为了让selectImageView出如今点击了的button同步,就
//  让selectImageView的X坐标和想要同步的button的X坐标一致即可了
- (void)moveSelectImageView:(UIButton*)btn{

[UIView animateWithDuration:0.3 animations:
^(void){

CGRect frame = _selectImageView.frame;
frame.origin.x = btn.frame.origin.x;
_selectImageView.frame = frame;

} completion:^(BOOL finished){
}];

}

#pragma mark - 按钮图片动画
//  点击按钮,button上的图片先缩小,再放大,最后回复原样
- (void)imgAnimate:(UIButton*)btn{

UIView *view=btn.subviews[0];

[UIView animateWithDuration:0.1 animations:
^(void){

view.transform = CGAffineTransformScale(CGAffineTransformIdentity,0.5, 0.5);

} completion:^(BOOL finished){
[UIView animateWithDuration:0.2 animations:
^(void){

view.transform = CGAffineTransformScale(CGAffineTransformIdentity,1.2, 1.2);

} completion:^(BOOL finished){
[UIView animateWithDuration:0.1 animations:
^(void){

view.transform = CGAffineTransformScale(CGAffineTransformIdentity,1,1);

} completion:^(BOOL finished){
}];
}];
}];

}


@图示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: