UIWindow,UINavigationController与UIViewController之间的关系

虽然每次你都用UINavigationController与UIWindow,但你不一定知道他们之间到底怎么运作的哦:)

AppDelegate.h的代码

RootViewController.m

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

#import "RootViewController.h"

#define VALUE  1

@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor redColor];

    UITapGestureRecognizer *tap =     [[UITapGestureRecognizer alloc] initWithTarget:self
                                            action:@selector(tapEvent:)];

    [self.view addGestureRecognizer:tap];
}

- (void)tapEvent:(UITapGestureRecognizer *)gesture
{
    static int flag = 1;
    if (flag)
    {
        // 初始化3D变换,获取默认值
        CATransform3D perspectiveTransform = CATransform3DIdentity;

        // 缩放变换
        perspectiveTransform = CATransform3DScale(perspectiveTransform, 0.75, 0.75, 0.75);

        [UIView animateWithDuration:0.3 animations:^{
            if (VALUE)
            {
                // 导航控制器的view
                self.navigationController.view.transform =                     CATransform3DGetAffineTransform(perspectiveTransform);
            }
            else
            {
                // 自身controller的view
                self.view.transform = CATransform3DGetAffineTransform(perspectiveTransform);
            }
        }];

        flag = 0;
    }
    else
    {
        // 初始化3D变换,获取默认值
        CATransform3D perspectiveTransform = CATransform3DIdentity;

        // 缩放变换
        perspectiveTransform = CATransform3DScale(perspectiveTransform, 1, 1, 1);

        [UIView animateWithDuration:0.3 animations:^{
            if (VALUE)
            {
                // 导航控制器的view
                self.navigationController.view.transform =                     CATransform3DGetAffineTransform(perspectiveTransform);
            }
            else
            {
                // 自身controller的view
                self.view.transform = CATransform3DGetAffineTransform(perspectiveTransform);
            }
        }];

        flag = 1;
    }
}

@end

VALUE = 1 的时候与 VALUE = 0 的时候

他们的关系其实非常简单.

UIWindow  ---> UINavigationController  --->  UIViewController,

有时候,我们需要做缩放动画的效果,或者是转场动画的效果,不理解他们之间细微的差距,是没办法处理好的.

他们之间的关系:

知道了这些原理,再写一个侧边栏,实在是太简单了:).

UIWindow,UINavigationController与UIViewController之间的关系

时间: 2024-11-04 22:41:06

UIWindow,UINavigationController与UIViewController之间的关系的相关文章

iOS 深入理解UINavigationController 和 UIViewController 之间的关系

创建三个类 C++代码   BasicViewController : UIViewController SecondViewController : UIViewController ThirdViewController : UIViewController 然后我们在BasicViewController .m文件中push一个viewController: SecondViewController *svc = [SecondViewController new]; [self.navi

ios7中 丰富多彩的UIViewController之间的切换

转载自:http://onevcat.com/2013/10/vc-transition-in-ios7/ 毫无疑问,ViewController(在本文中简写为VC)是使用MVC构建Cocoa或者CocoaTouch程序时最重要的一个类,我们的日常工作中一般来说最花费时间和精力的也是在为VC部分编写代码.苹果产品是注重用户体验的,而对细节进行琢磨也是苹果对于开发者一直以来的要求和希望.在用户体验中,VC之间的关系,比如不同VC之间迁移和转换动画效果一直是一个值得不断推敲的重点.在iOS7中,苹

【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

(1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器可以自定义不同的状态栏如下: -(BOOL)prefersStatusBarHidden{ } -(UIStatusBarStyle)preferredStatusBarStyle{ } --如果我们需要交给UIApplication对象管理(iOS6之前就是),则需要如下设置: 先在info.plist中把默认的设置修改掉: 然后直接用如下代码即可: - (void)view

深入Linux内核架构 - 内核之中数据结构之间的关系图 & 设备驱动程序(转)

内核之中数据结构之间的关系图 设备驱动程序

Spring初学之bean之间的关系和bean的作用域

一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.o

Spring学习--Bean 之间的关系

Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 bean 从父 bean 中继承配置 , 包括 bean 的属性配置. 子 bean 也可以覆盖从父 bean 继承过来的配置. 父 bean 可以作为配置模板 , 也可以作为 bean 实例.若只想把父 bean 作为模板 , 可以设置 <bean> 的 abstract 属性为 true ,

Linux中的文件描述符与打开文件之间的关系

1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3.POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号

WEB组件之间的关系

WEB组件之间的关系: A:重定向的特点: 1:发生客户端 2:地址栏发生变化 3:两个WEB组件不共享request的数据. 服务端的方法:response.sendRedirect(); 服务端的方法:response.sendRedirect("相对路径");   相对路径 request.getContextpath+"路径" 客户端的方法: window.location.href='URL地址' B:请求转发: request.getRequestDis

oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系

前言:在oracle运维的过程中,经常会使用到一些以V$开头的动态视图,比如V$session, 有一次偶然看到有人用V_$session, 初以为别人写错了,没想到desc v_$session以后能看到和v$session一样的结构,再以后又发现以gv$开头的视图等等.趁这次在一台Linux系统上装oracle的机会,终于弄清楚了这些动态视图与相应表之间的关系.这些都是由oracle自己管理的数据结构,得从v$fixed_table入手:[[email protected] admin]$