动画隐藏UITabBarController与UINavigationController

效果图:

源码:

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,布布扣,bubuko.com

时间: 2024-12-22 23:30:53

动画隐藏UITabBarController与UINavigationController的相关文章

UITabBarController 和 UINavigationController 的详解

首先得搞清这两个控制器之间的层级关系,我们直接看官网给的图,如下所示: 从这张图可以看到:最右边的Assembled views是呈现给用户的界面,它左边的Window是最底层的窗口,重点来了,再往左,是Tab bar view,Tab bar view的上方是Navigation view,最后是用户定制的视图. 看完这个,代码就应该很好写了,我们需要把Navigation view加到 Tab bar view的内容上去,Tab bar view再加到Window上去.就是Window套UI

jQuery动画隐藏和显示 hide() show() toggle()用法

jQuery动画隐藏和显示 hide()  show() toggle()用法 <div>www.cnmibee.com</div> 1,jQuery hide() 和 show() $("#hide").click(function(){ $("p").hide(); }); $("#show").click(function(){ $("p").show(); }); 2,jQuery toggle

自定义Tabbar实现push动画隐藏效果

在之前的一篇文章(链接)中我写到了没有用UITabbarController来实现一个自定义Tabbar,当然功能也简陋了点.注意到在Weico或微信中的自定义tabbar有一个这样的功能:push到下一个页面时tabbar会被自动隐藏,下面我就来说说如何使我前面做的自定义tabbar也能实现隐藏. 如果是原生的tabbar,这个功能实现很容易.在iOS中,每个UIViewController都有一个属性hidesBottomBarWhenPushed,每次push一个viewControlle

IOS 两种控制器的使用,纯代码UITabBarController 与 UINavigationController

先说简单的吧,UINavigationController代码创建非常简单,仅需一行代码 //NewsViewController是你创建的一个View NewsViewController *newsPage = [[NewsViewController alloc]init]; UINavigationController *newsNav = [[UINavigationController alloc] initWithRootViewController:newsPage]; 然后是重

UITabBarController 笔记(三) UITabBarController 配合 UINavigationController 的使用

建个空的iOS工程 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after applicat

隐藏UITabBarController中的tabbar

在pushViewController之前调用: 1 self.hidesBottomBarWhenPushed = YES; 2 ZWMessageViewController *messageController = [[ZWMessageViewController alloc] initWithDict:_dataSource[indexPath.row]]; 3 [self.navigationController pushViewController:messageControlle

UINavigationController与UITabBarController相关问题

UINavigationController与UITabBarController相关问题 UINavigationController与UITabBarController混用是非常常见的,有时候会遇到UINavigationController推出(push)出controller后隐藏UITabBarController的问题,很容易对吧. 源码如下: // // AppDelegate.m // NavigationController // // Copyright (c) 2014年

IOS研究之UITabBarController隐藏tabBar以及addChildViewController

 最近我所在的项目组对项目进行了一些基础组件的优化,其中有关于UITabBarController隐藏tabBar的问题感觉有必要总结下. 一,需求分析 先来说说项目基本需求:整个项目由左侧栏和主视图组成,主视图主体是一个UITabBarController,下属几个嵌套了UINavigationController的UIViewController. 要求:当在页面上下滑动的时候,根据用户手势需要隐藏显示底部栏,也就是默认的UITabBarController的tabBar. 我在设计的时

UITabBarController + UINavigationController复合架构设计

纯代码创建,不提倡使用XIB和故事版(storyboard),虽然提高开发速度,但是消耗性能. 1.先看控制器之间的层级关系:如下图所示 从这张图可以看到:最右边的Assembled views是呈现给用户的界面,它左边的Window是最底层的窗口,重点来了,再往左,是Tab bar view,Tab bar view的上方是Navigation view,最后是用户定制的视图. 2.了解以后,代码就应该很好写了.需要把Navigation view加到 Tab bar view的内容上去,Ta