动画隐藏UITabBarController与UINavigationController

动画隐藏UITabBarController与UINavigationController_ide

效果图:

动画隐藏UITabBarController与UINavigationController_重要_02

源码:

AppDelegate.m

//
//  AppDelegate.m
//  HideTabbar
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "AppDelegate.h"
#import "RootViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    UITabBarController *tab        = [[UITabBarController alloc] init];
    tab.viewControllers            = @[[RootViewController new]];
    UITabBar     *tabBar           = tab.tabBar;
    UITabBarItem *tabBarItem       = [tabBar.items objectAtIndex:0];
    tabBarItem.title               = @"YouXianMing";
    NSDictionary *textDic          = \
        @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Thin"
                                               size:20.f]};
    [tabBarItem setTitlePositionAdjustment:UIOffsetMake(0, -12.f)];
    [tabBarItem setTitleTextAttributes:textDic
                              forState:UIControlStateNormal];
    
    UINavigationController *NC     = \
        [[UINavigationController alloc] initWithRootViewController:tab];
    self.window.rootViewController = NC;
    self.window.backgroundColor    = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

@end

RootViewController.m

//
//  RootViewController.m
//  HideTabbar
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"

@interface RootViewController ()

@property (nonatomic, assign) BOOL      flag;

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.layer.contents    = (__bridge id)([UIImage imageNamed:@"back"].CGImage);

    // 添加手势
    UITapGestureRecognizer *tap = \
        [[UITapGestureRecognizer alloc] initWithTarget:self
                                                action:@selector(event:)];
    [self.view addGestureRecognizer:tap];
}

- (void)event:(UITapGestureRecognizer *)tap
{
    if (!_flag)
    {
        [self hideTabBar:self.tabBarController];
    }
    else
    {
        [self showTabBar:self.tabBarController];
    }
    
    _flag = !_flag;
}

- (void)hideTabBar:(UITabBarController *)tabbarcontroller
{
    // 隐藏导航栏
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    
    // 隐藏tabbar
    [UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^{
        for(UIView *view in tabbarcontroller.view.subviews)
        {
            if([view isKindOfClass:[UITabBar class]])
            {
                [view setFrame:CGRectMake(view.frame.origin.x,
                                          view.frame.origin.y + 50,
                                          view.frame.size.width,
                                          view.frame.size.height)];
            }
            else
            {
                [view setFrame:CGRectMake(view.frame.origin.x,
                                          view.frame.origin.y,
                                          view.frame.size.width,
                                          view.frame.size.height + 50)];
            }
        }
    }];
}

- (void)showTabBar:(UITabBarController *)tabbarcontroller
{    
    // 显示导航栏
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    
    // 显示tabbar
    [UIView animateWithDuration:UINavigationControllerHideShowBarDuration animations:^{
        for(UIView *view in tabbarcontroller.view.subviews)
        {
            if([view isKindOfClass:[UITabBar class]])
            {
                [view setFrame:CGRectMake(view.frame.origin.x,
                                          view.frame.origin.y - 50,
                                          view.frame.size.width,
                                          view.frame.size.height)];
            }
            else
            {
                [view setFrame:CGRectMake(view.frame.origin.x,
                                          view.frame.origin.y,
                                          view.frame.size.width,
                                          view.frame.size.height - 50)];
            }
        }
    }];
}

@end

核心的地方:

动画隐藏UITabBarController与UINavigationController_ide_03