本文转载自:http://blog.sina.com.cn/s/blog_79c5bdc30100t88i.html
#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
方法二:http://www.cocoachina.com/bbs/read.php?tid-62061-page-1.html