From f4175c910457ae56e494aec05f7d2de44e982447 Mon Sep 17 00:00:00 2001 From: Constantine Mureev Date: Fri, 19 Aug 2011 09:37:35 +0400 Subject: [PATCH 1/6] fix TabBarRow is slightly moved to the right bug --- CustomTabBar/Classes/CustomTabBar.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomTabBar/Classes/CustomTabBar.m b/CustomTabBar/Classes/CustomTabBar.m index 9503e73..66cc419 100644 --- a/CustomTabBar/Classes/CustomTabBar.m +++ b/CustomTabBar/Classes/CustomTabBar.m @@ -220,7 +220,7 @@ - (void) addTabBarArrowAtIndex:(NSUInteger)itemIndex tabBarArrow.tag = TAB_ARROW_IMAGE_TAG; // To get the vertical location we go up by the height of arrow and then come back down 2 pixels so the arrow is slightly on top of the tab bar. CGFloat verticalLocation = -tabBarArrowImage.size.height + 2; - tabBarArrow.frame = CGRectMake([self horizontalLocationFor:itemIndex], verticalLocation, tabBarArrowImage.size.width, tabBarArrowImage.size.height); + tabBarArrow.frame = CGRectMake([self horizontalLocationFor:itemIndex] - 5, verticalLocation, tabBarArrowImage.size.width, tabBarArrowImage.size.height); [self addSubview:tabBarArrow]; } From 8bbad16e85a7c954fcc34a6adcb714ae8aa95650 Mon Sep 17 00:00:00 2001 From: Constantine Mureev Date: Fri, 19 Aug 2011 09:38:06 +0400 Subject: [PATCH 2/6] add gitignore --- .../CustomTabBar.xcodeproj/project.xcworkspace/.gitignore | 1 + .../xcuserdata/ConstantineMureev.xcuserdatad/.gitignore | 1 + .../ConstantineMureev.xcuserdatad/xcdebugger/.gitignore | 1 + .../ConstantineMureev.xcuserdatad/xcschemes/.gitignore | 2 ++ 4 files changed, 5 insertions(+) create mode 100644 CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/.gitignore create mode 100644 CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/xcuserdata/ConstantineMureev.xcuserdatad/.gitignore create mode 100644 CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcdebugger/.gitignore create mode 100644 CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcschemes/.gitignore diff --git a/CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/.gitignore b/CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/.gitignore new file mode 100644 index 0000000..c21ae06 --- /dev/null +++ b/CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/.gitignore @@ -0,0 +1 @@ +/contents.xcworkspacedata diff --git a/CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/xcuserdata/ConstantineMureev.xcuserdatad/.gitignore b/CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/xcuserdata/ConstantineMureev.xcuserdatad/.gitignore new file mode 100644 index 0000000..198d655 --- /dev/null +++ b/CustomTabBar/CustomTabBar.xcodeproj/project.xcworkspace/xcuserdata/ConstantineMureev.xcuserdatad/.gitignore @@ -0,0 +1 @@ +/UserInterfaceState.xcuserstate diff --git a/CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcdebugger/.gitignore b/CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcdebugger/.gitignore new file mode 100644 index 0000000..3d060de --- /dev/null +++ b/CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcdebugger/.gitignore @@ -0,0 +1 @@ +/Breakpoints.xcbkptlist diff --git a/CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcschemes/.gitignore b/CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcschemes/.gitignore new file mode 100644 index 0000000..6cfcc68 --- /dev/null +++ b/CustomTabBar/CustomTabBar.xcodeproj/xcuserdata/ConstantineMureev.xcuserdatad/xcschemes/.gitignore @@ -0,0 +1,2 @@ +/CustomTabBar.xcscheme +/xcschememanagement.plist From 93cdd4036ca73dfd2c7f963822c7aded027ccbf6 Mon Sep 17 00:00:00 2001 From: Constantine Mureev Date: Fri, 19 Aug 2011 10:28:44 +0400 Subject: [PATCH 3/6] fix chage glow timer bug --- .../Classes/CustomTabBarViewController.h | 6 +- .../Classes/CustomTabBarViewController.m | 67 +++++++++++-------- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/CustomTabBar/Classes/CustomTabBarViewController.h b/CustomTabBar/Classes/CustomTabBarViewController.h index ed74937..cbc04e9 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.h +++ b/CustomTabBar/Classes/CustomTabBarViewController.h @@ -27,9 +27,9 @@ #import "CustomTabBar.h" -@interface CustomTabBarViewController : UIViewController -{ - CustomTabBar* tabBar; +@interface CustomTabBarViewController : UIViewController { + CustomTabBar* tabBar; + NSTimer* glowTimer; } @property (nonatomic, retain) CustomTabBar* tabBar; diff --git a/CustomTabBar/Classes/CustomTabBarViewController.m b/CustomTabBar/Classes/CustomTabBarViewController.m index 7a430da..c6ecc19 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.m +++ b/CustomTabBar/Classes/CustomTabBarViewController.m @@ -162,31 +162,44 @@ - (UIImage*) tabBarArrowImage return [UIImage imageNamed:@"TabBarNipple.png"]; } -- (void) touchDownAtItemAtIndex:(NSUInteger)itemIndex -{ - // Remove the current view controller's view - UIView* currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG]; - [currentView removeFromSuperview]; - - // Get the right view controller - NSDictionary* data = [tabBarItems objectAtIndex:itemIndex]; - UIViewController* viewController = [data objectForKey:@"viewController"]; - - // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) - UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; +- (void)stopGlowTimer { + if([glowTimer isValid]) { + [glowTimer invalidate]; + } + + [glowTimer release]; + glowTimer = nil; +} - // Set the view controller's frame to account for the tab bar - viewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBarGradient.size.height*2)); +- (void)startGlowTimer:(NSInteger)itemIndex { + [self stopGlowTimer]; + glowTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.3] interval:0.3 target:self selector:@selector(addGlowTimerFireMethod:) userInfo:[NSNumber numberWithInteger:itemIndex] repeats:NO]; + [[NSRunLoop currentRunLoop] addTimer:glowTimer forMode:NSDefaultRunLoopMode]; +} - // Se the tag so we can find it later - viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; - - // Add the new view controller's view - [self.view insertSubview:viewController.view belowSubview:tabBar]; - - // In 1 second glow the selected tab - [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(addGlowTimerFireMethod:) userInfo:[NSNumber numberWithInteger:itemIndex] repeats:NO]; - +- (void) touchDownAtItemAtIndex:(NSUInteger)itemIndex { + // Remove the current view controller's view + UIView* currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG]; + [currentView removeFromSuperview]; + + // Get the right view controller + NSDictionary* data = [tabBarItems objectAtIndex:itemIndex]; + UIViewController* viewController = [data objectForKey:@"viewController"]; + + // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) + UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; + + // Set the view controller's frame to account for the tab bar + viewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBarGradient.size.height*2)); + + // Se the tag so we can find it later + viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; + + // Add the new view controller's view + [self.view insertSubview:viewController.view belowSubview:tabBar]; + + // In 1 second glow the selected tab + [self startGlowTimer:itemIndex]; } - (void)addGlowTimerFireMethod:(NSTimer*)theTimer @@ -230,10 +243,10 @@ - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrie currentView.frame = CGRectMake(0,0,width, height-(tabBarGradient.size.height*2)); } -- (void)dealloc -{ - [super dealloc]; - [tabBar release]; +- (void)dealloc { + [self stopGlowTimer]; + [super dealloc]; + [tabBar release]; } @end From 29d9e23a19818885fb9aad56dbe1eacfa0e46f16 Mon Sep 17 00:00:00 2001 From: Constantine Mureev Date: Fri, 19 Aug 2011 11:09:32 +0400 Subject: [PATCH 4/6] add calls viewWillAppear:/viewDidAppear: --- .../Classes/CustomTabBarViewController.h | 1 + .../Classes/CustomTabBarViewController.m | 31 +++++++++++++------ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/CustomTabBar/Classes/CustomTabBarViewController.h b/CustomTabBar/Classes/CustomTabBarViewController.h index cbc04e9..1546e40 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.h +++ b/CustomTabBar/Classes/CustomTabBarViewController.h @@ -32,6 +32,7 @@ NSTimer* glowTimer; } +@property (nonatomic, assign) NSInteger currentIndex; @property (nonatomic, retain) CustomTabBar* tabBar; @end diff --git a/CustomTabBar/Classes/CustomTabBarViewController.m b/CustomTabBar/Classes/CustomTabBarViewController.m index c6ecc19..cc75558 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.m +++ b/CustomTabBar/Classes/CustomTabBarViewController.m @@ -32,7 +32,7 @@ static NSArray* tabBarItems = nil; @implementation CustomTabBarViewController -@synthesize tabBar; +@synthesize currentIndex, tabBar; - (void) awakeFromNib { @@ -173,30 +173,41 @@ - (void)stopGlowTimer { - (void)startGlowTimer:(NSInteger)itemIndex { [self stopGlowTimer]; - glowTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.3] interval:0.3 target:self selector:@selector(addGlowTimerFireMethod:) userInfo:[NSNumber numberWithInteger:itemIndex] repeats:NO]; + glowTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.2] interval:0.2 target:self selector:@selector(addGlowTimerFireMethod:) userInfo:[NSNumber numberWithInteger:itemIndex] repeats:NO]; [[NSRunLoop currentRunLoop] addTimer:glowTimer forMode:NSDefaultRunLoopMode]; } - (void) touchDownAtItemAtIndex:(NSUInteger)itemIndex { - // Remove the current view controller's view + NSDictionary* data = [tabBarItems objectAtIndex:self.currentIndex]; + UIViewController* previousViewController = [data objectForKey:@"viewController"]; + data = [tabBarItems objectAtIndex:itemIndex]; + UIViewController* nextViewController = [data objectForKey:@"viewController"]; + UIView* currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG]; - [currentView removeFromSuperview]; - // Get the right view controller - NSDictionary* data = [tabBarItems objectAtIndex:itemIndex]; - UIViewController* viewController = [data objectForKey:@"viewController"]; + if (currentView == previousViewController.view) { + [previousViewController viewWillDisappear:NO]; + } + [nextViewController viewWillAppear:NO]; + + // Remove the current view controller's view + [currentView removeFromSuperview]; // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; // Set the view controller's frame to account for the tab bar - viewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBarGradient.size.height*2)); + nextViewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBarGradient.size.height*2)); // Se the tag so we can find it later - viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; + nextViewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; // Add the new view controller's view - [self.view insertSubview:viewController.view belowSubview:tabBar]; + self.currentIndex = itemIndex; + [self.view insertSubview:nextViewController.view belowSubview:tabBar]; + + [previousViewController viewDidDisappear:NO]; + [nextViewController viewDidAppear:NO]; // In 1 second glow the selected tab [self startGlowTimer:itemIndex]; From a17517aab12da61fac99a77c00d0ddaafe4c7d90 Mon Sep 17 00:00:00 2001 From: Constantine Mureev Date: Fri, 19 Aug 2011 11:22:53 +0400 Subject: [PATCH 5/6] tapping an already selected tab bar item pop the selected view controller's navigation controller (if any) to the root VC. --- .../Classes/CustomTabBarViewController.m | 66 +++++++++++-------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/CustomTabBar/Classes/CustomTabBarViewController.m b/CustomTabBar/Classes/CustomTabBarViewController.m index cc75558..eb2e73b 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.m +++ b/CustomTabBar/Classes/CustomTabBarViewController.m @@ -179,38 +179,46 @@ - (void)startGlowTimer:(NSInteger)itemIndex { - (void) touchDownAtItemAtIndex:(NSUInteger)itemIndex { NSDictionary* data = [tabBarItems objectAtIndex:self.currentIndex]; - UIViewController* previousViewController = [data objectForKey:@"viewController"]; - data = [tabBarItems objectAtIndex:itemIndex]; - UIViewController* nextViewController = [data objectForKey:@"viewController"]; - + UIViewController* previousViewController = [data objectForKey:@"viewController"]; UIView* currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG]; - if (currentView == previousViewController.view) { - [previousViewController viewWillDisappear:NO]; + // check on tapping same tab only on first load + if (itemIndex == self.currentIndex && currentView) { + if ([previousViewController isKindOfClass:[UINavigationController class]]) { + UINavigationController* navigationVC = (UINavigationController*)previousViewController; + [navigationVC popToRootViewControllerAnimated:YES]; + } + } else { + data = [tabBarItems objectAtIndex:itemIndex]; + UIViewController* nextViewController = [data objectForKey:@"viewController"]; + + if (currentView == previousViewController.view) { + [previousViewController viewWillDisappear:NO]; + } + [nextViewController viewWillAppear:NO]; + + // Remove the current view controller's view + [currentView removeFromSuperview]; + + // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) + UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; + + // Set the view controller's frame to account for the tab bar + nextViewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBarGradient.size.height*2)); + + // Se the tag so we can find it later + nextViewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; + + // Add the new view controller's view + self.currentIndex = itemIndex; + [self.view insertSubview:nextViewController.view belowSubview:tabBar]; + + [previousViewController viewDidDisappear:NO]; + [nextViewController viewDidAppear:NO]; + + // In 1 second glow the selected tab + [self startGlowTimer:itemIndex]; } - [nextViewController viewWillAppear:NO]; - - // Remove the current view controller's view - [currentView removeFromSuperview]; - - // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) - UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; - - // Set the view controller's frame to account for the tab bar - nextViewController.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height-(tabBarGradient.size.height*2)); - - // Se the tag so we can find it later - nextViewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; - - // Add the new view controller's view - self.currentIndex = itemIndex; - [self.view insertSubview:nextViewController.view belowSubview:tabBar]; - - [previousViewController viewDidDisappear:NO]; - [nextViewController viewDidAppear:NO]; - - // In 1 second glow the selected tab - [self startGlowTimer:itemIndex]; } - (void)addGlowTimerFireMethod:(NSTimer*)theTimer From 236abf86c083934e61c7d651713eadd5d442b67e Mon Sep 17 00:00:00 2001 From: Constantine Mureev Date: Fri, 19 Aug 2011 16:03:23 +0400 Subject: [PATCH 6/6] 1. add init method without xib 2. add colored images for diggrent index 3. add animation for hiding and showing glow --- CustomTabBar/Classes/CustomTabBar.h | 6 +- CustomTabBar/Classes/CustomTabBar.m | 83 +++-- .../Classes/CustomTabBarAppDelegate.h | 2 +- .../Classes/CustomTabBarAppDelegate.m | 24 +- .../Classes/CustomTabBarViewController.h | 2 + .../Classes/CustomTabBarViewController.m | 95 +++--- .../CustomTabBar.xcodeproj/project.pbxproj | 96 +++++- .../{TabBarGlow.png => TabBarGlow1.png} | Bin .../{TabBarGlow@2x.png => TabBarGlow1@2x.png} | Bin CustomTabBar/Images/TabBarGlow2.png | Bin 0 -> 3451 bytes CustomTabBar/Images/TabBarGlow2@2x.png | Bin 0 -> 5399 bytes CustomTabBar/Images/TabBarGlow3.png | Bin 0 -> 3455 bytes CustomTabBar/Images/TabBarGlow3@2x.png | Bin 0 -> 5258 bytes CustomTabBar/Images/TabBarGlow4.png | Bin 0 -> 3524 bytes CustomTabBar/Images/TabBarGlow4@2x.png | Bin 0 -> 5200 bytes CustomTabBar/Images/TabBarGlow5.png | Bin 0 -> 3393 bytes CustomTabBar/Images/TabBarGlow5@2x.png | Bin 0 -> 5007 bytes ....png => TabBarItemSelectedBackground1.png} | Bin ...g => TabBarItemSelectedBackground1@2x.png} | Bin .../Images/TabBarItemSelectedBackground2.png | Bin 0 -> 3660 bytes .../TabBarItemSelectedBackground2@2x.png | Bin 0 -> 4655 bytes .../Images/TabBarItemSelectedBackground3.png | Bin 0 -> 3526 bytes .../TabBarItemSelectedBackground3@2x.png | Bin 0 -> 4761 bytes .../Images/TabBarItemSelectedBackground4.png | Bin 0 -> 3797 bytes .../TabBarItemSelectedBackground4@2x.png | Bin 0 -> 4875 bytes .../Images/TabBarItemSelectedBackground5.png | Bin 0 -> 3352 bytes .../TabBarItemSelectedBackground5@2x.png | Bin 0 -> 4307 bytes CustomTabBar/MainWindow.xib | 323 ++---------------- 28 files changed, 232 insertions(+), 399 deletions(-) rename CustomTabBar/Images/{TabBarGlow.png => TabBarGlow1.png} (100%) rename CustomTabBar/Images/{TabBarGlow@2x.png => TabBarGlow1@2x.png} (100%) create mode 100644 CustomTabBar/Images/TabBarGlow2.png create mode 100644 CustomTabBar/Images/TabBarGlow2@2x.png create mode 100644 CustomTabBar/Images/TabBarGlow3.png create mode 100644 CustomTabBar/Images/TabBarGlow3@2x.png create mode 100644 CustomTabBar/Images/TabBarGlow4.png create mode 100644 CustomTabBar/Images/TabBarGlow4@2x.png create mode 100644 CustomTabBar/Images/TabBarGlow5.png create mode 100644 CustomTabBar/Images/TabBarGlow5@2x.png rename CustomTabBar/Images/{TabBarItemSelectedBackground.png => TabBarItemSelectedBackground1.png} (100%) rename CustomTabBar/Images/{TabBarItemSelectedBackground@2x.png => TabBarItemSelectedBackground1@2x.png} (100%) create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground2.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground2@2x.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground3.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground3@2x.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground4.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground4@2x.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground5.png create mode 100644 CustomTabBar/Images/TabBarItemSelectedBackground5@2x.png diff --git a/CustomTabBar/Classes/CustomTabBar.h b/CustomTabBar/Classes/CustomTabBar.h index 5a6462a..e8e3b8a 100644 --- a/CustomTabBar/Classes/CustomTabBar.h +++ b/CustomTabBar/Classes/CustomTabBar.h @@ -30,8 +30,8 @@ - (UIImage*) imageFor:(CustomTabBar*)tabBar atIndex:(NSUInteger)itemIndex; - (UIImage*) backgroundImage; -- (UIImage*) selectedItemBackgroundImage; -- (UIImage*) glowImage; +- (UIImage*) selectedItemBackgroundImageWith:(NSInteger)index; +- (UIImage*) glowImageWith:(NSInteger)index; - (UIImage*) selectedItemImage; - (UIImage*) tabBarArrowImage; @@ -53,7 +53,7 @@ - (void) selectItemAtIndex:(NSInteger)index; - (void) glowItemAtIndex:(NSInteger)index; -- (void) removeGlowAtIndex:(NSInteger)index; +- (void) hideGlow; - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration; diff --git a/CustomTabBar/Classes/CustomTabBar.m b/CustomTabBar/Classes/CustomTabBar.m index 66cc419..602ebad 100644 --- a/CustomTabBar/Classes/CustomTabBar.m +++ b/CustomTabBar/Classes/CustomTabBar.m @@ -165,37 +165,60 @@ - (void) selectItemAtIndex:(NSInteger)index [self dimAllButtonsExcept:button]; } -// Add a glow at the bottom of the specified item -- (void) glowItemAtIndex:(NSInteger)index -{ - // Get the right button. We'll use to calculate where to put the glow - UIButton* button = [buttons objectAtIndex:index]; - - // Ask the delegate for the glow image - UIImage* glowImage = [delegate glowImage]; - - // Create the image view that will hold the glow image - UIImageView* glowImageView = [[[UIImageView alloc] initWithImage:glowImage] autorelease]; - - // Center the glow image at the center of the button horizontally and at the bottom of the button vertically - glowImageView.frame = CGRectMake(button.frame.size.width/2.0 - glowImage.size.width/2.0, button.frame.origin.y + button.frame.size.height - glowImage.size.height, glowImage.size.width, glowImage.size.height); - - // Set the glow image view's tag so we can find it later when we want to remove the glow - glowImageView.tag = GLOW_IMAGE_TAG; - - // Add the glow image view to the button - [button addSubview:glowImageView]; +- (void) hideGlow { + UIImageView* oldGlowImageView = (UIImageView*)[self viewWithTag:GLOW_IMAGE_TAG]; + [UIView animateWithDuration:0.2 animations:^(void) { + oldGlowImageView.alpha = 0; + }]; } -// Remove the glow at the bottom of the specified item -- (void) removeGlowAtIndex:(NSInteger)index -{ - // Find the right button - UIButton* button = [buttons objectAtIndex:index]; - // Find the glow image view - UIImageView* glowImageView = (UIImageView*)[button viewWithTag:GLOW_IMAGE_TAG]; - // Remove it from the button - [glowImageView removeFromSuperview]; +- (void) glowItemAtIndex:(NSInteger)index { + // Get the right button. We'll use to calculate where to put the glow + UIButton* button = [buttons objectAtIndex:index]; + + // Ask the delegate for the glow image + UIImage* glowImage = [delegate glowImageWith:(NSInteger)index]; + + // Create the image view that will hold the glow image + UIImageView* newGlowImageView = [[[UIImageView alloc] initWithImage:glowImage] autorelease]; + // Center the glow image at the center of the button horizontally and at the bottom of the button vertically + newGlowImageView.frame = CGRectMake(button.frame.size.width/2.0 - glowImage.size.width/2.0, button.frame.origin.y + button.frame.size.height - glowImage.size.height, glowImage.size.width, glowImage.size.height); + newGlowImageView.alpha = 0; + + [button addSubview:newGlowImageView]; + + UIImageView* oldGlowImageView = (UIImageView*)[self viewWithTag:GLOW_IMAGE_TAG]; + newGlowImageView.tag = GLOW_IMAGE_TAG; + + if (oldGlowImageView) { + // oldGlowImageView already start hiding with animation + if (oldGlowImageView.alpha != 0) { + [UIView animateWithDuration:0.05 animations:^(void) { + oldGlowImageView.alpha = 0; + newGlowImageView.alpha = 0.3; + } completion:^(BOOL finished) { + [UIView animateWithDuration:0.15 animations:^(void) { + newGlowImageView.alpha = 1.0; + } completion:^(BOOL finished) { + [oldGlowImageView removeFromSuperview]; + }]; + }]; + } else { + [UIView animateWithDuration:0.1 animations:^(void) { + newGlowImageView.alpha = 1.0; + } completion:^(BOOL finished) { + [oldGlowImageView removeFromSuperview]; + }]; + } + } else { + [UIView animateWithDuration:0.05 animations:^(void) { + newGlowImageView.alpha = 0.3; + } completion:^(BOOL finished) { + [UIView animateWithDuration:0.1 animations:^(void) { + newGlowImageView.alpha = 1.0; + }]; + }]; + } } - (CGFloat) horizontalLocationFor:(NSUInteger)tabIndex @@ -237,7 +260,7 @@ - (UIButton*) buttonAtIndex:(NSUInteger)itemIndex width:(CGFloat)width // Create the normal state image by converting the image's background to gray UIImage* buttonImage = [self tabBarImage:rawButtonImage size:button.frame.size backgroundImage:nil]; // And create the pressed state image by converting the image's background to the background image we get from the delegate - UIImage* buttonPressedImage = [self tabBarImage:rawButtonImage size:button.frame.size backgroundImage:[delegate selectedItemBackgroundImage]]; + UIImage* buttonPressedImage = [self tabBarImage:rawButtonImage size:button.frame.size backgroundImage:[delegate selectedItemBackgroundImageWith:itemIndex]]; // Set the gray & blue images as the button states [button setImage:buttonImage forState:UIControlStateNormal]; diff --git a/CustomTabBar/Classes/CustomTabBarAppDelegate.h b/CustomTabBar/Classes/CustomTabBarAppDelegate.h index 71ff909..a3b7687 100644 --- a/CustomTabBar/Classes/CustomTabBarAppDelegate.h +++ b/CustomTabBar/Classes/CustomTabBarAppDelegate.h @@ -35,7 +35,7 @@ } @property (nonatomic, retain) IBOutlet UIWindow *window; -@property (nonatomic, retain) IBOutlet CustomTabBarViewController *viewController; +@property (nonatomic, retain) CustomTabBarViewController *viewController; @end diff --git a/CustomTabBar/Classes/CustomTabBarAppDelegate.m b/CustomTabBar/Classes/CustomTabBarAppDelegate.m index a8b37e9..13d2cda 100644 --- a/CustomTabBar/Classes/CustomTabBarAppDelegate.m +++ b/CustomTabBar/Classes/CustomTabBarAppDelegate.m @@ -37,12 +37,28 @@ @implementation CustomTabBarAppDelegate #pragma mark - #pragma mark Application lifecycle -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + UIViewController *detailController1 = [[[UIViewController alloc] init] autorelease]; + detailController1.view.backgroundColor = [UIColor redColor]; - // Override point for customization after application launch. + UIViewController *detailController2 = [[[UIViewController alloc] init] autorelease]; + detailController2.view.backgroundColor = [UIColor greenColor]; + + UIViewController *detailController3 = [[[UIViewController alloc] init] autorelease]; + detailController3.view.backgroundColor = [UIColor blueColor]; + + UIViewController *detailController4 = [[[UIViewController alloc] init] autorelease]; + detailController4.view.backgroundColor = [UIColor cyanColor]; + + UIViewController *detailController5 = [[[UIViewController alloc] init] autorelease]; + detailController5.view.backgroundColor = [UIColor purpleColor]; + + CustomTabBarViewController* customTabBarViewController = [[CustomTabBarViewController alloc] initWihViewControllers:[NSArray arrayWithObjects:detailController1, detailController2, detailController3, detailController4, detailController5, nil] +imagesNames:[NSArray arrayWithObjects:@"chat.png", @"compose-at.png", @"messages.png", @"magnifying-glass.png", @"more.png", nil]]; + self.viewController = customTabBarViewController; + [customTabBarViewController release]; - // Add the view controller's view to the window and display. - [self.window addSubview:viewController.view]; + self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; diff --git a/CustomTabBar/Classes/CustomTabBarViewController.h b/CustomTabBar/Classes/CustomTabBarViewController.h index 1546e40..71b89d3 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.h +++ b/CustomTabBar/Classes/CustomTabBarViewController.h @@ -32,6 +32,8 @@ NSTimer* glowTimer; } +- (id)initWihViewControllers:(NSArray*)viewControllers imagesNames:(NSArray*)imagesNames; + @property (nonatomic, assign) NSInteger currentIndex; @property (nonatomic, retain) CustomTabBar* tabBar; diff --git a/CustomTabBar/Classes/CustomTabBarViewController.m b/CustomTabBar/Classes/CustomTabBarViewController.m index eb2e73b..697c66e 100644 --- a/CustomTabBar/Classes/CustomTabBarViewController.m +++ b/CustomTabBar/Classes/CustomTabBarViewController.m @@ -34,49 +34,45 @@ @implementation CustomTabBarViewController @synthesize currentIndex, tabBar; -- (void) awakeFromNib -{ - // Set up some fake view controllers each with a different background color so we can visually see the controllers getting swapped around - UIViewController *detailController1 = [[[UIViewController alloc] init] autorelease]; - detailController1.view.backgroundColor = [UIColor redColor]; - - UIViewController *detailController2 = [[[UIViewController alloc] init] autorelease]; - detailController2.view.backgroundColor = [UIColor greenColor]; - - UIViewController *detailController3 = [[[UIViewController alloc] init] autorelease]; - detailController3.view.backgroundColor = [UIColor blueColor]; - - UIViewController *detailController4 = [[[UIViewController alloc] init] autorelease]; - detailController4.view.backgroundColor = [UIColor cyanColor]; - - UIViewController *detailController5 = [[[UIViewController alloc] init] autorelease]; - detailController5.view.backgroundColor = [UIColor purpleColor]; - tabBarItems = [[NSArray arrayWithObjects: - [NSDictionary dictionaryWithObjectsAndKeys:@"chat.png", @"image", detailController1, @"viewController", nil], - [NSDictionary dictionaryWithObjectsAndKeys:@"compose-at.png", @"image", detailController2, @"viewController", nil], - [NSDictionary dictionaryWithObjectsAndKeys:@"messages.png", @"image", detailController3, @"viewController", nil], - [NSDictionary dictionaryWithObjectsAndKeys:@"magnifying-glass.png", @"image", detailController4, @"viewController", nil], - [NSDictionary dictionaryWithObjectsAndKeys:@"more.png", @"image", detailController5, @"viewController", nil], nil] retain]; +- (id)initWihViewControllers:(NSArray*)viewControllers imagesNames:(NSArray*)imagesNames { + if ([viewControllers count] != [imagesNames count]) { + return nil; + } else { + self = [super init]; + if (self) { + NSMutableArray* dictionarys = [NSMutableArray new]; + + int count = 0; + for (NSString* imageName in imagesNames) { + UIViewController* vc = [viewControllers objectAtIndex:count]; + [dictionarys addObject:[NSDictionary dictionaryWithObjectsAndKeys:imageName, @"image", vc, @"viewController", nil]]; + count++; + } + + tabBarItems = dictionarys; + + // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) + UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; + + // Create a custom tab bar passing in the number of items, the size of each item and setting ourself as the delegate + self.tabBar = [[[CustomTabBar alloc] initWithItemCount:tabBarItems.count itemSize:CGSizeMake(self.view.frame.size.width/tabBarItems.count, tabBarGradient.size.height*2) tag:0 delegate:self] autorelease]; + + // Place the tab bar at the bottom of our view + tabBar.frame = CGRectMake(0,self.view.frame.size.height-(tabBarGradient.size.height*2),self.view.frame.size.width, tabBarGradient.size.height*2); + [self.view addSubview:tabBar]; + + // Select the first tab + [tabBar selectItemAtIndex:0]; + [self touchDownAtItemAtIndex:0]; + } + return self; + } } - (void)viewDidLoad { [super viewDidLoad]; - - // Use the TabBarGradient image to figure out the tab bar's height (22x2=44) - UIImage* tabBarGradient = [UIImage imageNamed:@"TabBarGradient.png"]; - - // Create a custom tab bar passing in the number of items, the size of each item and setting ourself as the delegate - self.tabBar = [[[CustomTabBar alloc] initWithItemCount:tabBarItems.count itemSize:CGSizeMake(self.view.frame.size.width/tabBarItems.count, tabBarGradient.size.height*2) tag:0 delegate:self] autorelease]; - - // Place the tab bar at the bottom of our view - tabBar.frame = CGRectMake(0,self.view.frame.size.height-(tabBarGradient.size.height*2),self.view.frame.size.width, tabBarGradient.size.height*2); - [self.view addSubview:tabBar]; - - // Select the first tab - [tabBar selectItemAtIndex:0]; - [self touchDownAtItemAtIndex:0]; } #pragma mark - @@ -116,15 +112,15 @@ - (UIImage*) backgroundImage } // This is the blue background shown for selected tab bar items -- (UIImage*) selectedItemBackgroundImage +- (UIImage*) selectedItemBackgroundImageWith:(NSInteger)index { - return [UIImage imageNamed:@"TabBarItemSelectedBackground.png"]; + return [UIImage imageNamed:[NSString stringWithFormat:@"TabBarItemSelectedBackground%d.png", index+1]]; } // This is the glow image shown at the bottom of a tab bar to indicate there are new items -- (UIImage*) glowImage +- (UIImage*) glowImageWith:(NSInteger)index { - UIImage* tabBarGlow = [UIImage imageNamed:@"TabBarGlow.png"]; + UIImage* tabBarGlow = [UIImage imageNamed:[NSString stringWithFormat:@"TabBarGlow%d.png", index+1]]; // Create a new image using the TabBarGlow image but offset 4 pixels down UIGraphicsBeginImageContextWithOptions(CGSizeMake(tabBarGlow.size.width, tabBarGlow.size.height-4.0), NO, 0.0); @@ -172,6 +168,11 @@ - (void)stopGlowTimer { } - (void)startGlowTimer:(NSInteger)itemIndex { + // Hide glow than we start timer first time + if (!glowTimer || ![glowTimer isValid]) { + [tabBar hideGlow]; + } + [self stopGlowTimer]; glowTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.2] interval:0.2 target:self selector:@selector(addGlowTimerFireMethod:) userInfo:[NSNumber numberWithInteger:itemIndex] repeats:NO]; [[NSRunLoop currentRunLoop] addTimer:glowTimer forMode:NSDefaultRunLoopMode]; @@ -221,16 +222,8 @@ - (void) touchDownAtItemAtIndex:(NSUInteger)itemIndex { } } -- (void)addGlowTimerFireMethod:(NSTimer*)theTimer -{ - // Remove the glow from all tab bar items - for (NSUInteger i = 0 ; i < tabBarItems.count ; i++) - { - [tabBar removeGlowAtIndex:i]; - } - - // Then add it to this tab bar item - [tabBar glowItemAtIndex:[[theTimer userInfo] integerValue]]; +- (void)addGlowTimerFireMethod:(NSTimer*)theTimer { + [tabBar glowItemAtIndex:[[theTimer userInfo] integerValue]]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation diff --git a/CustomTabBar/CustomTabBar.xcodeproj/project.pbxproj b/CustomTabBar/CustomTabBar.xcodeproj/project.pbxproj index 61e7434..039a97b 100755 --- a/CustomTabBar/CustomTabBar.xcodeproj/project.pbxproj +++ b/CustomTabBar/CustomTabBar.xcodeproj/project.pbxproj @@ -26,16 +26,32 @@ 7F48D57E12D1B88500DE44F6 /* messages@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D56A12D1B88500DE44F6 /* messages@2x.png */; }; 7F48D57F12D1B88500DE44F6 /* more.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D56B12D1B88500DE44F6 /* more.png */; }; 7F48D58012D1B88500DE44F6 /* more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D56C12D1B88500DE44F6 /* more@2x.png */; }; - 7F48D58112D1B88500DE44F6 /* TabBarGlow.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D56D12D1B88500DE44F6 /* TabBarGlow.png */; }; - 7F48D58212D1B88500DE44F6 /* TabBarGlow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D56E12D1B88500DE44F6 /* TabBarGlow@2x.png */; }; 7F48D58312D1B88500DE44F6 /* TabBarGradient.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D56F12D1B88500DE44F6 /* TabBarGradient.png */; }; 7F48D58412D1B88500DE44F6 /* TabBarGradient@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57012D1B88500DE44F6 /* TabBarGradient@2x.png */; }; - 7F48D58512D1B88500DE44F6 /* TabBarItemSelectedBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57112D1B88500DE44F6 /* TabBarItemSelectedBackground.png */; }; - 7F48D58612D1B88500DE44F6 /* TabBarItemSelectedBackground@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57212D1B88500DE44F6 /* TabBarItemSelectedBackground@2x.png */; }; 7F48D58712D1B88500DE44F6 /* TabBarNipple.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57312D1B88500DE44F6 /* TabBarNipple.png */; }; 7F48D58812D1B88500DE44F6 /* TabBarNipple@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57412D1B88500DE44F6 /* TabBarNipple@2x.png */; }; 7F48D58912D1B88500DE44F6 /* TabBarSelection.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57512D1B88500DE44F6 /* TabBarSelection.png */; }; 7F48D58A12D1B88500DE44F6 /* TabBarSelection@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F48D57612D1B88500DE44F6 /* TabBarSelection@2x.png */; }; + FCD4F15B13FE5365003BC1C5 /* TabBarItemSelectedBackground1.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15113FE5364003BC1C5 /* TabBarItemSelectedBackground1.png */; }; + FCD4F15C13FE5365003BC1C5 /* TabBarItemSelectedBackground1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15213FE5364003BC1C5 /* TabBarItemSelectedBackground1@2x.png */; }; + FCD4F15D13FE5365003BC1C5 /* TabBarItemSelectedBackground2.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15313FE5364003BC1C5 /* TabBarItemSelectedBackground2.png */; }; + FCD4F15E13FE5365003BC1C5 /* TabBarItemSelectedBackground2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15413FE5364003BC1C5 /* TabBarItemSelectedBackground2@2x.png */; }; + FCD4F15F13FE5365003BC1C5 /* TabBarItemSelectedBackground3.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15513FE5365003BC1C5 /* TabBarItemSelectedBackground3.png */; }; + FCD4F16013FE5365003BC1C5 /* TabBarItemSelectedBackground3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15613FE5365003BC1C5 /* TabBarItemSelectedBackground3@2x.png */; }; + FCD4F16113FE5365003BC1C5 /* TabBarItemSelectedBackground4.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15713FE5365003BC1C5 /* TabBarItemSelectedBackground4.png */; }; + FCD4F16213FE5365003BC1C5 /* TabBarItemSelectedBackground4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15813FE5365003BC1C5 /* TabBarItemSelectedBackground4@2x.png */; }; + FCD4F16313FE5365003BC1C5 /* TabBarItemSelectedBackground5.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15913FE5365003BC1C5 /* TabBarItemSelectedBackground5.png */; }; + FCD4F16413FE5365003BC1C5 /* TabBarItemSelectedBackground5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F15A13FE5365003BC1C5 /* TabBarItemSelectedBackground5@2x.png */; }; + FCD4F17413FE8079003BC1C5 /* TabBarGlow1.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F16A13FE8079003BC1C5 /* TabBarGlow1.png */; }; + FCD4F17513FE8079003BC1C5 /* TabBarGlow1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F16B13FE8079003BC1C5 /* TabBarGlow1@2x.png */; }; + FCD4F17613FE8079003BC1C5 /* TabBarGlow2.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F16C13FE8079003BC1C5 /* TabBarGlow2.png */; }; + FCD4F17713FE8079003BC1C5 /* TabBarGlow2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F16D13FE8079003BC1C5 /* TabBarGlow2@2x.png */; }; + FCD4F17813FE8079003BC1C5 /* TabBarGlow3.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F16E13FE8079003BC1C5 /* TabBarGlow3.png */; }; + FCD4F17913FE8079003BC1C5 /* TabBarGlow3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F16F13FE8079003BC1C5 /* TabBarGlow3@2x.png */; }; + FCD4F17A13FE8079003BC1C5 /* TabBarGlow4.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F17013FE8079003BC1C5 /* TabBarGlow4.png */; }; + FCD4F17B13FE8079003BC1C5 /* TabBarGlow4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F17113FE8079003BC1C5 /* TabBarGlow4@2x.png */; }; + FCD4F17C13FE8079003BC1C5 /* TabBarGlow5.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F17213FE8079003BC1C5 /* TabBarGlow5.png */; }; + FCD4F17D13FE8079003BC1C5 /* TabBarGlow5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCD4F17313FE8079003BC1C5 /* TabBarGlow5@2x.png */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -63,17 +79,33 @@ 7F48D56A12D1B88500DE44F6 /* messages@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "messages@2x.png"; sourceTree = ""; }; 7F48D56B12D1B88500DE44F6 /* more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = more.png; sourceTree = ""; }; 7F48D56C12D1B88500DE44F6 /* more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "more@2x.png"; sourceTree = ""; }; - 7F48D56D12D1B88500DE44F6 /* TabBarGlow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGlow.png; sourceTree = ""; }; - 7F48D56E12D1B88500DE44F6 /* TabBarGlow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGlow@2x.png"; sourceTree = ""; }; 7F48D56F12D1B88500DE44F6 /* TabBarGradient.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGradient.png; sourceTree = ""; }; 7F48D57012D1B88500DE44F6 /* TabBarGradient@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGradient@2x.png"; sourceTree = ""; }; - 7F48D57112D1B88500DE44F6 /* TabBarItemSelectedBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarItemSelectedBackground.png; sourceTree = ""; }; - 7F48D57212D1B88500DE44F6 /* TabBarItemSelectedBackground@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarItemSelectedBackground@2x.png"; sourceTree = ""; }; 7F48D57312D1B88500DE44F6 /* TabBarNipple.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarNipple.png; sourceTree = ""; }; 7F48D57412D1B88500DE44F6 /* TabBarNipple@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarNipple@2x.png"; sourceTree = ""; }; 7F48D57512D1B88500DE44F6 /* TabBarSelection.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarSelection.png; sourceTree = ""; }; 7F48D57612D1B88500DE44F6 /* TabBarSelection@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarSelection@2x.png"; sourceTree = ""; }; 8D1107310486CEB800E47090 /* CustomTabBar-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "CustomTabBar-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; + FCD4F15113FE5364003BC1C5 /* TabBarItemSelectedBackground1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarItemSelectedBackground1.png; sourceTree = ""; }; + FCD4F15213FE5364003BC1C5 /* TabBarItemSelectedBackground1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarItemSelectedBackground1@2x.png"; sourceTree = ""; }; + FCD4F15313FE5364003BC1C5 /* TabBarItemSelectedBackground2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarItemSelectedBackground2.png; sourceTree = ""; }; + FCD4F15413FE5364003BC1C5 /* TabBarItemSelectedBackground2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarItemSelectedBackground2@2x.png"; sourceTree = ""; }; + FCD4F15513FE5365003BC1C5 /* TabBarItemSelectedBackground3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarItemSelectedBackground3.png; sourceTree = ""; }; + FCD4F15613FE5365003BC1C5 /* TabBarItemSelectedBackground3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarItemSelectedBackground3@2x.png"; sourceTree = ""; }; + FCD4F15713FE5365003BC1C5 /* TabBarItemSelectedBackground4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarItemSelectedBackground4.png; sourceTree = ""; }; + FCD4F15813FE5365003BC1C5 /* TabBarItemSelectedBackground4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarItemSelectedBackground4@2x.png"; sourceTree = ""; }; + FCD4F15913FE5365003BC1C5 /* TabBarItemSelectedBackground5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarItemSelectedBackground5.png; sourceTree = ""; }; + FCD4F15A13FE5365003BC1C5 /* TabBarItemSelectedBackground5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarItemSelectedBackground5@2x.png"; sourceTree = ""; }; + FCD4F16A13FE8079003BC1C5 /* TabBarGlow1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGlow1.png; sourceTree = ""; }; + FCD4F16B13FE8079003BC1C5 /* TabBarGlow1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGlow1@2x.png"; sourceTree = ""; }; + FCD4F16C13FE8079003BC1C5 /* TabBarGlow2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGlow2.png; sourceTree = ""; }; + FCD4F16D13FE8079003BC1C5 /* TabBarGlow2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGlow2@2x.png"; sourceTree = ""; }; + FCD4F16E13FE8079003BC1C5 /* TabBarGlow3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGlow3.png; sourceTree = ""; }; + FCD4F16F13FE8079003BC1C5 /* TabBarGlow3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGlow3@2x.png"; sourceTree = ""; }; + FCD4F17013FE8079003BC1C5 /* TabBarGlow4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGlow4.png; sourceTree = ""; }; + FCD4F17113FE8079003BC1C5 /* TabBarGlow4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGlow4@2x.png"; sourceTree = ""; }; + FCD4F17213FE8079003BC1C5 /* TabBarGlow5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TabBarGlow5.png; sourceTree = ""; }; + FCD4F17313FE8079003BC1C5 /* TabBarGlow5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TabBarGlow5@2x.png"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -156,6 +188,26 @@ 7F48D56212D1B88500DE44F6 /* Images */ = { isa = PBXGroup; children = ( + FCD4F16A13FE8079003BC1C5 /* TabBarGlow1.png */, + FCD4F16B13FE8079003BC1C5 /* TabBarGlow1@2x.png */, + FCD4F16C13FE8079003BC1C5 /* TabBarGlow2.png */, + FCD4F16D13FE8079003BC1C5 /* TabBarGlow2@2x.png */, + FCD4F16E13FE8079003BC1C5 /* TabBarGlow3.png */, + FCD4F16F13FE8079003BC1C5 /* TabBarGlow3@2x.png */, + FCD4F17013FE8079003BC1C5 /* TabBarGlow4.png */, + FCD4F17113FE8079003BC1C5 /* TabBarGlow4@2x.png */, + FCD4F17213FE8079003BC1C5 /* TabBarGlow5.png */, + FCD4F17313FE8079003BC1C5 /* TabBarGlow5@2x.png */, + FCD4F15113FE5364003BC1C5 /* TabBarItemSelectedBackground1.png */, + FCD4F15213FE5364003BC1C5 /* TabBarItemSelectedBackground1@2x.png */, + FCD4F15313FE5364003BC1C5 /* TabBarItemSelectedBackground2.png */, + FCD4F15413FE5364003BC1C5 /* TabBarItemSelectedBackground2@2x.png */, + FCD4F15513FE5365003BC1C5 /* TabBarItemSelectedBackground3.png */, + FCD4F15613FE5365003BC1C5 /* TabBarItemSelectedBackground3@2x.png */, + FCD4F15713FE5365003BC1C5 /* TabBarItemSelectedBackground4.png */, + FCD4F15813FE5365003BC1C5 /* TabBarItemSelectedBackground4@2x.png */, + FCD4F15913FE5365003BC1C5 /* TabBarItemSelectedBackground5.png */, + FCD4F15A13FE5365003BC1C5 /* TabBarItemSelectedBackground5@2x.png */, 7F48D56312D1B88500DE44F6 /* chat.png */, 7F48D56412D1B88500DE44F6 /* chat@2x.png */, 7F48D56512D1B88500DE44F6 /* compose-at.png */, @@ -166,12 +218,8 @@ 7F48D56A12D1B88500DE44F6 /* messages@2x.png */, 7F48D56B12D1B88500DE44F6 /* more.png */, 7F48D56C12D1B88500DE44F6 /* more@2x.png */, - 7F48D56D12D1B88500DE44F6 /* TabBarGlow.png */, - 7F48D56E12D1B88500DE44F6 /* TabBarGlow@2x.png */, 7F48D56F12D1B88500DE44F6 /* TabBarGradient.png */, 7F48D57012D1B88500DE44F6 /* TabBarGradient@2x.png */, - 7F48D57112D1B88500DE44F6 /* TabBarItemSelectedBackground.png */, - 7F48D57212D1B88500DE44F6 /* TabBarItemSelectedBackground@2x.png */, 7F48D57312D1B88500DE44F6 /* TabBarNipple.png */, 7F48D57412D1B88500DE44F6 /* TabBarNipple@2x.png */, 7F48D57512D1B88500DE44F6 /* TabBarSelection.png */, @@ -241,16 +289,32 @@ 7F48D57E12D1B88500DE44F6 /* messages@2x.png in Resources */, 7F48D57F12D1B88500DE44F6 /* more.png in Resources */, 7F48D58012D1B88500DE44F6 /* more@2x.png in Resources */, - 7F48D58112D1B88500DE44F6 /* TabBarGlow.png in Resources */, - 7F48D58212D1B88500DE44F6 /* TabBarGlow@2x.png in Resources */, 7F48D58312D1B88500DE44F6 /* TabBarGradient.png in Resources */, 7F48D58412D1B88500DE44F6 /* TabBarGradient@2x.png in Resources */, - 7F48D58512D1B88500DE44F6 /* TabBarItemSelectedBackground.png in Resources */, - 7F48D58612D1B88500DE44F6 /* TabBarItemSelectedBackground@2x.png in Resources */, 7F48D58712D1B88500DE44F6 /* TabBarNipple.png in Resources */, 7F48D58812D1B88500DE44F6 /* TabBarNipple@2x.png in Resources */, 7F48D58912D1B88500DE44F6 /* TabBarSelection.png in Resources */, 7F48D58A12D1B88500DE44F6 /* TabBarSelection@2x.png in Resources */, + FCD4F15B13FE5365003BC1C5 /* TabBarItemSelectedBackground1.png in Resources */, + FCD4F15C13FE5365003BC1C5 /* TabBarItemSelectedBackground1@2x.png in Resources */, + FCD4F15D13FE5365003BC1C5 /* TabBarItemSelectedBackground2.png in Resources */, + FCD4F15E13FE5365003BC1C5 /* TabBarItemSelectedBackground2@2x.png in Resources */, + FCD4F15F13FE5365003BC1C5 /* TabBarItemSelectedBackground3.png in Resources */, + FCD4F16013FE5365003BC1C5 /* TabBarItemSelectedBackground3@2x.png in Resources */, + FCD4F16113FE5365003BC1C5 /* TabBarItemSelectedBackground4.png in Resources */, + FCD4F16213FE5365003BC1C5 /* TabBarItemSelectedBackground4@2x.png in Resources */, + FCD4F16313FE5365003BC1C5 /* TabBarItemSelectedBackground5.png in Resources */, + FCD4F16413FE5365003BC1C5 /* TabBarItemSelectedBackground5@2x.png in Resources */, + FCD4F17413FE8079003BC1C5 /* TabBarGlow1.png in Resources */, + FCD4F17513FE8079003BC1C5 /* TabBarGlow1@2x.png in Resources */, + FCD4F17613FE8079003BC1C5 /* TabBarGlow2.png in Resources */, + FCD4F17713FE8079003BC1C5 /* TabBarGlow2@2x.png in Resources */, + FCD4F17813FE8079003BC1C5 /* TabBarGlow3.png in Resources */, + FCD4F17913FE8079003BC1C5 /* TabBarGlow3@2x.png in Resources */, + FCD4F17A13FE8079003BC1C5 /* TabBarGlow4.png in Resources */, + FCD4F17B13FE8079003BC1C5 /* TabBarGlow4@2x.png in Resources */, + FCD4F17C13FE8079003BC1C5 /* TabBarGlow5.png in Resources */, + FCD4F17D13FE8079003BC1C5 /* TabBarGlow5@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/CustomTabBar/Images/TabBarGlow.png b/CustomTabBar/Images/TabBarGlow1.png similarity index 100% rename from CustomTabBar/Images/TabBarGlow.png rename to CustomTabBar/Images/TabBarGlow1.png diff --git a/CustomTabBar/Images/TabBarGlow@2x.png b/CustomTabBar/Images/TabBarGlow1@2x.png similarity index 100% rename from CustomTabBar/Images/TabBarGlow@2x.png rename to CustomTabBar/Images/TabBarGlow1@2x.png diff --git a/CustomTabBar/Images/TabBarGlow2.png b/CustomTabBar/Images/TabBarGlow2.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb0f62186d2b089b727e55e7eaeb7dceca8b9e4 GIT binary patch literal 3451 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 KMNUMnLSTY%4!DT` literal 0 HcmV?d00001 diff --git a/CustomTabBar/Images/TabBarGlow5.png b/CustomTabBar/Images/TabBarGlow5.png new file mode 100644 index 0000000000000000000000000000000000000000..17ec298d442bf41f0c7722d9164cb2537e50b75c GIT binary patch literal 3393 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 XlyxL07qd=<00000NkvXXu0mjfYuQtl literal 0 HcmV?d00001 diff --git a/CustomTabBar/Images/TabBarGlow5@2x.png b/CustomTabBar/Images/TabBarGlow5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bcec97f4c4f18adfb4ec45e69dad1a6b5c15344f GIT binary patch literal 5007 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 AnE(I) literal 0 HcmV?d00001 diff --git a/CustomTabBar/Images/TabBarItemSelectedBackground3@2x.png b/CustomTabBar/Images/TabBarItemSelectedBackground3@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..15c11aaabbb4b838100f6cee29f9765642312379 GIT binary patch literal 4761 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 B6Bqyh literal 0 HcmV?d00001 diff --git a/CustomTabBar/MainWindow.xib b/CustomTabBar/MainWindow.xib index d352e02..1481c48 100644 --- a/CustomTabBar/MainWindow.xib +++ b/CustomTabBar/MainWindow.xib @@ -2,18 +2,19 @@ 1056 - 10J869 - 851 - 1038.35 - 461.00 + 11B26 + 1617 + 1138 + 566.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 141 + 534 - + YES - - + IBProxyObject + IBUIWindow + IBUICustomObject YES @@ -24,9 +25,7 @@ YES - - YES - + YES @@ -41,20 +40,12 @@ IBCocoaTouchFramework - - CustomTabBarViewController - - - 1 - - IBCocoaTouchFramework - NO - 292 {320, 480} + 3 MCAwAA @@ -77,14 +68,6 @@ 4 - - - viewController - - - - 11 - window @@ -109,26 +92,21 @@ File's Owner - - 3 - - - CustomTabBar App Delegate - -2 - 10 - + 12 + - 12 - + 3 + + CustomTabBar App Delegate @@ -137,11 +115,9 @@ YES -1.CustomClassName + -1.IBPluginDependency -2.CustomClassName - 10.CustomClassName - 10.IBEditorWindowLastContentRect - 10.IBPluginDependency - 12.IBEditorWindowLastContentRect + -2.IBPluginDependency 12.IBPluginDependency 3.CustomClassName 3.IBPluginDependency @@ -149,11 +125,9 @@ YES UIApplication + com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder - CustomTabBarViewController - {{234, 376}, {320, 480}} com.apple.InterfaceBuilder.IBCocoaTouchPlugin - {{525, 346}, {320, 480}} com.apple.InterfaceBuilder.IBCocoaTouchPlugin CustomTabBarAppDelegate com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -162,17 +136,13 @@ YES - - YES - + YES - - YES - + 15 @@ -184,253 +154,19 @@ CustomTabBarAppDelegate NSObject - YES - - YES - viewController - window - - - YES - CustomTabBarViewController - UIWindow - + window + UIWindow - YES - - YES - viewController - window - - - YES - - viewController - CustomTabBarViewController - - - window - UIWindow - + window + + window + UIWindow IBProjectSource - Classes/CustomTabBarAppDelegate.h - - - - CustomTabBarAppDelegate - NSObject - - IBUserSource - - - - - CustomTabBarViewController - UIViewController - - IBProjectSource - Classes/CustomTabBarViewController.h - - - - UIWindow - UIView - - IBUserSource - - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIApplication - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIApplication.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIPrintFormatter.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - UIWindow - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIWindow.h + ./Classes/CustomTabBarAppDelegate.h @@ -446,8 +182,7 @@ YES - CustomTabBar.xcodeproj 3 - 141 + 534