自定义UITabBarController

来源:互联网 发布:特斯拉model3知乎 编辑:程序博客网 时间:2024/05/21 08:48

     最近发现一款和糗百差不多的应用叫<逗乐玩>,它的底部标签栏的效果不错,于是动手写了下,下面给出具体代码示例.

#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){               }];          }];     }];        }

@图示:


4 0