zoukankan      html  css  js  c++  java
  • 自定义的tabBarController的几种方法

    本文转载自:http://blog.sina.com.cn/s/blog_79c5bdc30100t88i.html

    我自己实现的一种可以很方便的实现更换TabBarController图片的方法,代码如下:
    #import <UIKit/UIKit.h>
    
    @interface CustomTabBarViewController : UITabBarController {
    
        UIImage                             *_tabBarBackgroundImage;   //整个tabBar的背景
        NSMutableArray                       *_unSelectedImageArray;   //非选中效果的tabBarItem数组
        NSMutableArray                       *_selectedImageArray;     //选中效果的tabBarItem数组
        NSMutableArray                       *_itemBgImageViewArray;   //item背景UIIMageView数组   
        int                                  _lastSelectedIndex;       //上一次选中的tabBarItem的index
    
        int                                  _hiddenIndex;
    
    }
    @property (nonatomic, retain) UIImage                         *tabBarBackgroundImage;
    @property (nonatomic, retain) NSMutableArray                  *unSelectedImageArray;
    @property (nonatomic, retain) NSMutableArray                  *selectedImageArray;
    @property (nonatomic, retain) NSMutableArray                  *itemBgImageViewArray;
    @property (nonatomic, assign) int                             lastSelectedIndex;
    @property (nonatomic, assign) int                             hiddenIndex;
    
    - (id)initWithTabBarBackgroundImage:(UIImage *)barBackgroundImage 
                  unSelectedImageArray:(NSMutableArray *)unImageArray
                     selectedImageArray:(NSMutableArray *)imageArray;
    
    //隐藏某个tabBarItem的图片
    -(void)hiddeItemImageView:(int)index;
    //显示某个tabBarItem的图片
    -(void)showItemImageView:(int)index;
    
    @end

    #import "CustomTabBarViewController.h"
    #define TabBarBackgroundImageViewTag 11111
    @implementation CustomTabBarViewController
    @synthesize tabBarBackgroundImage                       = _tabBarBackgroundImage;
    @synthesize unSelectedImageArray                        = _unSelectedImageArray;
    @synthesize selectedImageArray                          = _selectedImageArray;
    @synthesize itemBgImageViewArray                        = _itemBgImageViewArray;
    @synthesize lastSelectedIndex                           = _lastSelectedIndex;
    @synthesize hiddenIndex                                 = _hiddenIndex;
    
    
    - (void)dealloc
    {   
       self.tabBarBackgroundImage = nil;
    
        self.unSelectedImageArray = nil;
    
        self.selectedImageArray = nil;
    
        self.itemBgImageViewArray = nil;
    
        [super dealloc];
    
    }
    
     
    
    - (void)didReceiveMemoryWarning
    
    {
        // Releases the view if it doesn't have a superview.
        [super didReceiveMemoryWarning];
        // Release any cached data, images, etc that aren't in use.
        self.tabBarBackgroundImage = nil;
    }
    
     
    
    - (id)initWithTabBarBackgroundImage:(UIImage *)barBackgroundImage 
    
                   unSelectedImageArray:(NSMutableArray *)unImageArray
    
                     selectedImageArray:(NSMutableArray *)imageArray {
    
        self = [super init];
    
        if (self) {
    
            
    
    //        self.tabBarBackgroundImage = barBackgroundImage;
    
    //        self.unSelectedImageArray = unImageArray;
    
    //        self.selectedImageArray = imageArray;
    
    //        
    
    //        self.itemBgImageViewArray = [NSMutableArray array];
    
    //        _lastSelectedIndex = 0;
    
    //        _hiddenIndex = -1;
    
        }
    
        return self;
    
    }
    
     
    
    - (id)init {
    
        self = [super init];
    
        if (self) {
    
    //        self.tabBarBackgroundImage = [UIImage imageNamed:@"menu_bg.png"];
    
    //        
    
    //        NSMutableArray *aunSelectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImage imageNamed:@"menu_paiyou.png"], 
    
    //                                                 [UIImage imageNamed:@"menu_chat.png"], 
    
    //                                                 [UIImage imageNamed:@"menu_map.png"], 
    
    //                                                 [UIImage imageNamed:@"menu_renwu.png"],
    
    //                                                 [UIImage imageNamed:@"menu_huibao.png"], nil];
    
    //        self.unSelectedImageArray = aunSelectedImageArray;
    
    //        [aunSelectedImageArray release];
    
    //        
    
    //        NSMutableArray *aselectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImage imageNamed:@"menu_paiyou_pressed.png"], 
    
    //                                               [UIImage imageNamed:@"menu_chat_pressed.png"], 
    
    //                                               [UIImage imageNamed:@"menu_map_pressed.png"], 
    
    //                                               [UIImage imageNamed:@"menu_renwu_pressed.png"], 
    
    //                                               [UIImage imageNamed:@"menu_huibao_pressed.png"], nil];
    
    //        self.selectedImageArray = aselectedImageArray;
    
    //        [aselectedImageArray release];
    
    //        
    
    //        self.itemBgImageViewArray = [NSMutableArray array];
    
    //        _lastSelectedIndex = 0;
    
    //        _hiddenIndex = -1;
    
            
    
        }
    
        return self;
    
    }
    
     
    
    #pragma mark - itemIndex methods
    
     
    
    - (void)setLastSelectedIndex:(int)lastSelectedIndex {
    
        if (_lastSelectedIndex != lastSelectedIndex) {
    
            //将上次的选中效果取消
    
            UIImageView *lastSelectedImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:_lastSelectedIndex];;
    
            lastSelectedImageView.image = [_unSelectedImageArray objectAtIndex:_lastSelectedIndex];
    
            _lastSelectedIndex = lastSelectedIndex;
        }
    }
    
    - (void)setSelectedIndex:(NSUInteger)selectedIndex {
    
        [super setSelectedIndex:selectedIndex];
    
        //将上次的选中效果取消
    
        self.lastSelectedIndex = selectedIndex;
    
        //将本次的选中效果显示
    
        UIImageView *selectedImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:selectedIndex];
    
        selectedImageView.image = [_selectedImageArray objectAtIndex:selectedIndex];
    
    }
    
     
    
    //隐藏某个tabBarItem的图片
    
    - (void)hiddeItemImageView:(int)index {
    
        if (_hiddenIndex != index) {
    
            _hiddenIndex = index;
    
            
    
            UIImageView *hiddenImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:_hiddenIndex];
    
            hiddenImageView.hidden = YES;
    
        }
    
    }
    
     
    
    //显示某个tabBarItem的图片
    
    - (void)showItemImageView:(int)index {
    
        if (_hiddenIndex == index) {
    
            UIImageView *hiddenImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:_hiddenIndex];
    
            hiddenImageView.hidden = NO;
    
            
    
            _hiddenIndex = -1;
    
        }
    
    }
    
     
    
    #pragma mark - View lifecycle
    
     
    
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    
    - (void)loadView
    
    {
    
        [super loadView];
    
        self.tabBarBackgroundImage = [UIImage imageNamed:@"menu_bg.png"];
    
        NSMutableArray *aunSelectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImageimageNamed:@"menu_paiyou.png"], 
    
                                                 [UIImage imageNamed:@"menu_chat.png"], 
    
                                                 [UIImage imageNamed:@"menu_map.png"], 
    
                                                 [UIImage imageNamed:@"menu_renwu.png"],
    
                                                 [UIImage imageNamed:@"menu_huibao.png"], nil];
    
        self.unSelectedImageArray = aunSelectedImageArray;
    
        [aunSelectedImageArray release];
    
        
    
        NSMutableArray *aselectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImageimageNamed:@"menu_paiyou_pressed.png"], 
    
                                               [UIImage imageNamed:@"menu_chat_pressed.png"], 
    
                                               [UIImage imageNamed:@"menu_map_pressed.png"], 
    
                                               [UIImage imageNamed:@"menu_renwu_pressed.png"], 
    
                                               [UIImage imageNamed:@"menu_huibao_pressed.png"], nil];
    
        self.selectedImageArray = aselectedImageArray;
    
        [aselectedImageArray release];
    
        
    
        self.itemBgImageViewArray = [NSMutableArray array];
    
        _lastSelectedIndex = 0;
    
        _hiddenIndex = -1;
    
    }
    
     
    
     
    
    #define ItemWidth 50
    
    #define ItemHeight 49
    
    #define SideMarginX 7
    
    #define SideMarginY 0.5
    
    #define Spacing 14
    
     
    
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    
    - (void)viewDidLoad
    
    {
    
        [super viewDidLoad];
    
        UIImageView *tabBarBackgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,self.tabBar.frame.size.width, self.tabBar.frame.size.height)];
    
        tabBarBackgroundImageView.tag = TabBarBackgroundImageViewTag;
    
        tabBarBackgroundImageView.contentMode = UIViewContentModeScaleAspectFit;
    
        tabBarBackgroundImageView.image = _tabBarBackgroundImage;
    
        [self.tabBar insertSubview:tabBarBackgroundImageView atIndex:0];
    
        [tabBarBackgroundImageView release];
    
     for (int i = 0; i < 5; i++) {
    
    UIImageView *itemBg  = [[UIImageView alloc] initWithFrame:CGRectMake(SideMarginX +ItemWidth * i + Spacing * i, SideMarginY, ItemWidth, ItemHeight)];
    
        itemBg.contentMode = UIViewContentModeScaleAspectFit;
    
        itemBg.image = [_unSelectedImageArray objectAtIndex:i];
    
        [self.tabBar insertSubview:itemBg atIndex:1];
    
        [_itemBgImageViewArray addObject:itemBg];
    
        [itemBg release];
    
    }
    
        self.selectedIndex = 0;
    
    }
    
     
    
    - (void)viewDidUnload
    
    {
    
        [super viewDidUnload];
    
        // Release any retained subviews of the main view.
    
        // e.g. self.myOutlet = nil;
    
        self.itemBgImageViewArray = nil;
    
    }
    
     
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    
    {
    
        // Return YES for supported orientations
    
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    
    }
    
    
    #pragma mark - UITabBarDelegate
    
    - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    
        self.selectedIndex = [tabBar.items indexOfObject:item];
    
    }
    
     
    
    @end

    other

     1 #import <UIKit/UIKit.h>
     2 #import <QuartzCore/QuartzCore.h>
     3 
     4 @interface XDTabBarController : UIViewController//UITabBarController
     5 {
     6     NSMutableArray *itemButtons;
     7     int currentSelectedIndex;
     8     UIView *customTabBarView;
     9     UIImageView *tabBarBgImgView;
    10     UIImageView *slideBg;
    11     
    12     NSArray *viewControllers;
    13     UINavigationController *contentNavigation;
    14 }
    15 
    16 @property (nonatomic, strong) UIView *customTabBarView;
    17 @property (nonatomic, strong) NSMutableArray *itemButtons;
    18 @property (nonatomic, assign) int currentSelectedIndex;
    19 @property (nonatomic, strong)  NSArray *viewControllers;
    20 
    21 - (void)setControllers: (NSArray *)array;
    22 
    23 @end
    View Code
    #import "XDTabBarController.h"
    //首页
    #define KLogoViewHeight 40
    #define KCustomTabBarHeight 44
    #define KTypeScrollViewHeight 30
    #define KPictureScrollerViewHeight 130
    #define KNewListHeight (460 - KCustomTabBarHeight - KLogoViewHeight - KTypeScrollViewHeight)
    
    static BOOL FIRSTTIME =YES;
    
    @interface XDTabBarController ()
    
    
    - (void)customTabBar;
    
    - (void)slideTabItemBg:(UIButton *)button;
    
    - (void)selectedTabItem: (UIButton *)button;
    
    @end
    
    @implementation XDTabBarController
    
    @synthesize customTabBarView;
    @synthesize itemButtons;
    @synthesize currentSelectedIndex;
    @synthesize viewControllers;
    
    - (void)setControllers: (NSArray *)array
    {
        viewControllers = array;
        contentNavigation = [[UINavigationController alloc] initWithRootViewController: [array objectAtIndex:0]];
        [self.view addSubview: contentNavigation.view];
    }
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear: animated];
        
        if (FIRSTTIME) {
            
            slideBg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"selectedTabbarItemBg.png"]];//选中时阴影层
            slideBg.alpha = 0.5;
            [self customTabBar];
            FIRSTTIME = NO;
        }
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    }
    
    - (void)viewDidUnload
    {
        [super viewDidUnload];
        // Release any retained subviews of the main view.
        // e.g. self.myOutlet = nil;
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    
    #pragma mark - custom methods
    - (void)customTabBar
    {
        CGRect tabBarFrame = CGRectMake(0, self.view.frame.size.height - KCustomTabBarHeight, 320, KCustomTabBarHeight);
        customTabBarView = [[UIView alloc] initWithFrame: tabBarFrame];
        tabBarBgImgView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, 320, KCustomTabBarHeight)];
        tabBarBgImgView.image = [UIImage imageNamed:@"tabBarBg.png"];
        [customTabBarView addSubview: tabBarBgImgView];
        
        //创建按钮
        int viewCount = viewControllers.count > 5 ? 5 : viewControllers.count;
        self.itemButtons = [NSMutableArray arrayWithCapacity:viewCount];
        double _width = 320 / viewCount;
        double _height = KCustomTabBarHeight;
        for (int i = 0; i < viewCount; i++) 
        {
            UIViewController *v = [viewControllers objectAtIndex:i];
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
            btn.tag = i;
            btn.frame = CGRectMake(i * _width, 0, _width, _height);
            [btn addTarget:self action:@selector(selectedTabItem:) forControlEvents: UIControlEventTouchUpInside];
            [btn setImage:v.tabBarItem.image forState:UIControlStateNormal];
            [btn setImageEdgeInsets:UIEdgeInsetsMake(-10, 0, 0, 0)];
            
            //添加标题
            UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, _height-18, _width, _height-30)];
            titleLabel.backgroundColor = [UIColor clearColor];
            titleLabel.text = v.tabBarItem.title;
            [titleLabel setFont:[UIFont systemFontOfSize:10]];
            titleLabel.textAlignment = UITextAlignmentCenter;
            titleLabel.textColor = [UIColor whiteColor];
            [btn addSubview:titleLabel];        
            
            [self addChildViewController: v];
            [self.itemButtons addObject:btn];
            [customTabBarView addSubview:btn];
            
            [titleLabel release];
        }
        
        [self.view addSubview: customTabBarView];
        [customTabBarView addSubview: slideBg];
        
        [self performSelector:@selector(slideTabItemBg:) withObject:[self.itemButtons objectAtIndex:0]];
        self.currentSelectedIndex = 0;
    }
    
    //切换滑块位置
    - (void)slideTabItemBg:(UIButton *)button
    {
        [UIView beginAnimations:nil context:nil];  
        [UIView setAnimationDuration:0.20];  
        [UIView setAnimationDelegate:self];
        slideBg.frame = button.frame;
        [UIView commitAnimations];
        CAKeyframeAnimation * animation; 
        animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
        animation.duration = 0.50; 
        animation.delegate = self;
        animation.removedOnCompletion = YES;
        animation.fillMode = kCAFillModeForwards;
        NSMutableArray *values = [NSMutableArray array];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]]; 
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.9)]]; 
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
        animation.values = values;
        [button.layer addAnimation:animation forKey:nil];
    }
    
    
    - (void)selectedTabItem: (UIButton *)button
    {
        if (self.currentSelectedIndex != button.tag)
        {
            [[[viewControllers objectAtIndex: self.currentSelectedIndex] view] removeFromSuperview];
            
            //[[self.viewControllers objectAtIndex:button.tag] popToRootViewControllerAnimated:YES];
            UIViewController *viewController = [viewControllers objectAtIndex:button.tag];
            [self.view addSubview: viewController.view];
            [self.view bringSubviewToFront: self.customTabBarView];
            //return;
            
            [self performSelector:@selector(slideTabItemBg:) withObject:button];
        }
        
        self.currentSelectedIndex = button.tag;
    }
    
    @end
    View Code

    方法二:http://www.cocoachina.com/bbs/read.php?tid-62061-page-1.html

    方法三:http://hi.baidu.com/yunhuaikong/blog/item/b0642bcbfc5ae49fc817684c.html
    自定义Badge:https://github.com/boctor/idev-recipes/tree/master/CustomTabBarNotification
    一些自定义控件:https://github.com/boctor/idev-recipes/tree/master/CustomTabBarNotification
  • 相关阅读:
    仿微博添加和删除的动画
    到公司实习一个月记
    写一份好简历
    排序算法之快速排序
    PHP和MYSQL中的日期和时间
    我的php经历
    新的征程
    毕业设计笔记
    排序算法之总结
    javascript执行效率小结
  • 原文地址:https://www.cnblogs.com/hl666/p/3696822.html
Copyright © 2011-2022 走看看