AndroidÖÐϰ¹ßÁ˽вà±ßÀ¸£¬iOSÖÐÈç¹û²»Ï°¹ß²à±ßÀ¸³ÆºôµÄ»°¿ÉÒÔ½Ðdock£¬²à±ßÀ¸µÄÇл»£¬ÀàËÆÓÚAndroidÖеĵײ¿µ¼º½À¸µÄÇл»£¬iPad³ß´ç´óÁËһЩ£¬µ¼º½µÄÀ¸Ä¿·ÅÔÚ²à±ß»áÏÔʾµÄ¸üºÃÄÍ¿´Ò»Ð©¡£Ñ¡ÏÊÇÓð´Å¥ÊµÏֵģ¬Í¨¹ý°´Å¥µÄ״̬¿ØÖư´Å¥µÄ±³¾°Í¼Æ¬£¬×îºóͨ¹ý°´Å¥µÄTagÊôÐÔ½øÐÐÏà¶ÔÓ¦µÄ²Ù×÷£¬iPadÐèÒª¿¼ÂÇÒ»¸öºáÊúÆÁµÄÎÊÌ⣬²»¹ýÏÖÔÚÓÐЩÏîĿΪÁËЧ¹ûÒ²ºÃ£¬ÎªÁË¿ª·¢Ð§ÂÊÒ²°Õ£¬¿ÉÄÜÖ»ÊÇÑ¡ÖÐÁ˺áÆÁЧ¹û¡£
»ù±¾²¼¾Ö
²¼¾Ö֮ǰÏÈÀ´¿´Ò»ÏÂ×îÖÕÐèҪʵÏÖµÄЧ¹û:

ÐèÒª×îËĸöͼƬ½øÐÐÏàÓ¦µÄ²Ù×÷£¬Í¨¹ýͼƬ¿ØÖÆ×îºóµÄÇл»Ð§¹û£¬ºÚÉ«µÄÊôÓÚ²à±ßÀ¸µÄÇøÓò£¬ËĸöͼƬÊǰ´Å¥µÄ±³¾°Í¼Æ¬£¬²»¹ýÓÉÓÚÐèÒª¾³£²Ù×÷ÇøÓòµÄ¿í¶ÈºÍ°´Å¥µÄ¿í¶È£¬ÐèÒªÔ¤¶¨ÒåÒ»ÏÂ,н¨Ò»¸öCommon.hÎļþ£¬Èç¹ûÄ㲻ϰ¹ß£¬ÄãÒ²¿ÉÒÔ¶¨ÒåΪConfig.h£¬ÄÜ¿´¶®¼´¿É:
//²à±ßÀ¸ÌõÄ¿µÄ³ß´ç
#define GPDockItemWidth 100
#define GPDockItemHeight 80 |
ÔÚ֮ǰµÄxCodeÖÐÊÇĬÈϵÄÓÐpchÎļþµÄ£¬xCode6.1ÖÐûÓУ¬ÐèҪн¨Ò»¸öpchÎļþ:

н¨Ö®ºó²¢²»Äܱ£Ö¤ÄãÔËÐгɹ¦£¬»¹ÐèҪȥ±àÒëÖÐÉèÖÃÒ»ÏÂPrefix Header($(SRCROOT)/PrefixHeader.pch)£¬ÇåÀíÏÂÏîÄ¿£¬µ¼ÈëCommon.hÎļþ¼´¿É³É¹¦£»

Demoʵս
¢ÙÊ×ÏÈÐèҪн¨Ò»¸öGPMainController¿ØÖÆÆ÷£¬¿ØÖÆÒ³ÃæÒ³ÃæÂß¼:
//
// GPMainController.h
// GrouponProject
//http://www.cnblogs.com/xiaofeixiang
// Created by keso on 15/3/9.
// Copyright (c) 2015Äê keso. All rights reserved.
//
#import
#import "GPDock.h"
@interface GPMainController : UIViewController
@end |
ÐèÒªÔÚViewDidLoad¼ÓÔØ²à±ßÀ¸ÇøÓò:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor=[UIColor greenColor];
//¼ÓÈë²à±ßÀ¸Dock
GPDock *dock=[[GPDock alloc]initWithFrame:CGRectMake(0, 0,GPDockItemWidth, self.view.frame.size.height)];
dock.dockDelegate=self;
[self.view addSubview:dock];
} |
ÏìÓ¦²à±ßÀ¸µÄµã»÷ʼþ£¬ÐèÒªÓõ½Î¯ÍУ¬Èç¹ûίÍв»ÊǺÜÊìϤ£¬¿ÉÒԲο¼±¾ÈË֮ǰµÄ²©¿Í£º
-(void)switchMainByTabItem:(GPDock *)gpdock originalTab:(int)start destinationTab:(int)end{
switch (end) {
case 0:
self.view.backgroundColor=[UIColor blackColor];
break;
case 1:
self.view.backgroundColor=[UIColor blueColor];
break;
case 2:
self.view.backgroundColor=[UIColor redColor];
break;
case 3:
self.view.backgroundColor=[UIColor purpleColor];
break;
default:
break;
}
} |
GPMainContrllerÖ÷ÒªÓÃÓÚ´¦ÀíÒ³ÃæµÄÂß¼£¬Í¬Ê±ÐèÒªÔÚAppDelegateÖÐÉèÖÃһϸù¿ØÖÆÆ÷:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UIView setAnimationDuration:2.0];
self.window.rootViewController=[[GPMainController alloc]init];
return YES;
} |
¢ÚÉèÖòà±ßÀ¸ÇøÓò£¬¼Ì³Ð×ÔUIView:
//
// GPDock.h
// GrouponProject
//http://www.cnblogs.com/xiaofeixiang
// Created by keso on 15/3/10.
// Copyright (c) 2015Äê keso. All rights reserved.
//
#import
#import "GPTabItem.h"
@class GPDock;
@protocol GPDockItemDelegate
-(void)switchMainByTabItem:(GPDock*)gpdock originalTab:(int)start destinationTab:(int)end;
@end
@interface GPDock : UIView
{
GPTabItem *selectedTabItem;
}
@property (nonatomic,weak) id dockDelegate;
@end |
³õʼ»¯²à±ßÀ¸:
-(instancetype)initWithFrame:(CGRect)frame{
self=[super initWithFrame:frame];
if (self) {
//×Ô¶¯ÉìËõ¸ß¶È¿ÉÉìËõ£¬Óұ߾à¿ÉÒÔÉìËõ
self.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleRightMargin;
//ÉèÖñ³¾°Í¼Æ¬
self.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"Toolbar_bg_tabbar.png"]];
[self addTabItems];
}
return self;
} |
Ìí¼ÓTabÑ¡Ï:
//Ìí¼ÓTabÑ¡Ï
- (void)addTabItems
{
//Ê×Ò³
[self addSingleTab:@"Toolbar_searchshop.png" selectedImage:@"Toolbar_searchshop_selected.png" weight:1];
//ÍŹº
[self addSingleTab:@"Toolbar_groupon.png" selectedImage:@"Toolbar_groupon_selected.png" weight:2];
//ÅÅÐаñ
[self addSingleTab:@"Toolbar_ranklist.png" selectedImage:@"Toolbar_ranklist_selected.png" weight:3];
// ¸öÈËÖÐÐÄ
[self addSingleTab:@"Toolbar_usercenter.png" selectedImage:@"Toolbar_usercenter_selected.png" weight:4];
} |
ÒòΪ´úÂëÀàËÆ£¬ËùÒÔ·â×°µ½Ò»¸ö·½·¨ÀïÃæ:
- (void)addSingleTab:(NSString *)backgroundImage selectedImage:(NSString *)selectedImage weight:(int)weight
{
GPTabItem *tabItem=[[GPTabItem alloc]init];
[tabItem setBackgroundImage:backgroundImage];
[tabItem setSelectedImage:selectedImage];
//ÉèÖÃλÖÃ
tabItem.frame = CGRectMake(0, GPDockItemHeight * (weight+1), 0, 0);
//ÉèÖÃÑ¡Öд¥ÃþÑ¡ÖÐʼþ
[tabItem addTarget:self action:@selector(tabItemTouchEvent:) forControlEvents:UIControlEventTouchDown];
tabItem.tag = weight - 1;
[self addSubview:tabItem];
} |
ÉèÖô¥Ãþʼþ:
//ÉèÖô¥Ãþʼþ
- (void)tabItemTouchEvent:(GPTabItem *)tabItem
{
if ([self.dockDelegate respondsToSelector:@selector(switchMainByTabItem:originalTab:destinationTab:)]) {
[self.dockDelegate switchMainByTabItem:self originalTab:selectedTabItem.tag destinationTab:tabItem.tag];
}
selectedTabItem.enabled=YES;
tabItem.enabled = NO;
//½«µ±Ç°Ñ¡Öеĸ³Öµ
selectedTabItem =tabItem;
} |
¢Û·â×°²à±ßÀ¸µÄGPDockItem£¬È»ºóÑ¡ÏÉϵĿÉÒԼ̳Уº
//
// GPDockItem.h
// GrouponProject
//²©¿ÍÔ°FlyElephant:http://www.cnblogs.com/xiaofeixiang
// Created by keso on 15/3/11.
// Copyright (c) 2015Äê keso. All rights reserved.
//
#import
@interface GPDockItem : UIButton
//±³¾°Í¼Æ¬
@property (nonatomic,strong) NSString *backgroundImage;
//Ñ¡ÖÐͼƬ
@property (nonatomic,strong) NSString *selectedImage;
@end |
¡¡ÉèÖñ³¾°Í¼Æ¬ºÍÑ¡ÖÐͼƬ:
//
// GPDockItem.m
// GrouponProject
//²©¿ÍÔ°FlyElephant:http://www.cnblogs.com/xiaofeixiang
// Created by keso on 15/3/11.
// Copyright (c) 2015Äê keso. All rights reserved.
//
#import "GPDockItem.h"
@implementation GPDockItem
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
-(instancetype)initWithFrame:(CGRect)frame{
self=[super initWithFrame:frame];
if (self) {
// Item·Ö¸îÏß
UIImageView *splitLine = [[UIImageView alloc] init];
splitLine.frame = CGRectMake(0, 0, GPDockItemWidth, 2);
splitLine.image = [UIImage imageNamed:@"separator_tabbar_item.png"];
[self addSubview:splitLine];
}
return self;
}
//ÉèÖñ³¾°Í¼Æ¬
-(void)setBackgroundImage:(NSString *)backgroundImage{
_backgroundImage=backgroundImage;
[self setImage:[UIImage imageNamed:backgroundImage] forState:UIControlStateNormal];
}
//ÉèÖÃÑ¡ÖÐͼƬ
-(void)setSelectedImage:(NSString *)selectedImage{
_selectedImage=selectedImage;
[self setImage:[UIImage imageNamed:selectedImage] forState:UIControlStateDisabled];
}
-(void)setFrame:(CGRect)frame{
//¹Ì¶¨Item¿í¸ß
frame.size=CGSizeMake(GPDockItemWidth, GPDockItemHeight);
[super setFrame:frame];
}
@end |
GPTabItem´úÂë:
#import "GPDockItem.h"
@interface GPTabItem : GPDockItem
@end |
ÉèÖÃÑ¡ÖÐʱµÄ±³¾°Í¼Æ¬:
//
// GPTabItem.m
// GrouponProject
//²©¿ÍÔ°FlyElephant:http://www.cnblogs.com/xiaofeixiang
// Created by keso on 15/3/11.
// Copyright (c) 2015Äê keso. All rights reserved.
//
#import "GPTabItem.h"
@implementation GPTabItem
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
-(instancetype)initWithFrame:(CGRect)frame{
self=[super initWithFrame:frame];
if (self) {
// ÉèÖÃÑ¡ÖÐʱ±³¾°Í¼Æ¬
[self setBackgroundImage:[UIImage imageNamed:@"bg_tabbar_item.png"] forState:UIControlStateDisabled];
}
return self;
}
@end |
×îÖÕЧ¹ûÈçÏÂ:

´úÂëÏà¶ÔÒÔÍù½Ï¶à£¬ÈçÓÐÒÅ©£¬ÇëËæÊ±ÓëÎÒÁªÏµ£¬ÈçÓкøУ¬ÍƼö»ò¹Ø×¢¾ù¿É
|