zoukankan      html  css  js  c++  java
  • IOS 学习笔记(1) 视图UIViewController

    1.UIViewController *newController=[[UIViewController alloc] initWithNibName:@"XXX" bundle:nil];中XXX为名字xib的文件名,这个主要用在xib视图添加到其他视图中的时候用到,比如自定义UIView,当添加这个自定义View时,添加起xib文件名的要。

    2.UIViewController创建时,函数的调用顺序如下:

    [viewDidLoad]
    [viewWillAppear:]
    [viewWillLayoutSubviews]   (iOS之后新API)
    [viewDidLayoutSubviews]    (IOS之后新API)
    [viewDidAppear:]
    
    当UIViewController销毁时,函数的调用顺序为:
    [viewWillDisappear:]
    [viewDidDisappear:]
    [viewDidUnload]  (IOS6之后不再被系统调用)

    不过,就像人只出生和死亡一次却能够在整个人生的道路上起起伏伏,UIViewController的viewDidLoad和viewDidUnload只会被系统调用一次,但是其他几个方法会随着主View的状况,反复被调用。

    3UIViewController对于旋转的支持

    UIViewController在支持旋转时也拥有一套消息处理函数

    算上viewWillLayoutSubviews和viewDidLayoutSubviews两个函数,这些回调函数会被系统根据固定的顺序触发调用。这个顺序会根据具体的操作系统的不同而不同

         在IOS5中,此顺序如下:

    [shouldAutorotateToInterfaceOrientation:]
    [willRotateToInterfaceOrientation:duration:]
    [viewWillLayoutSubviews]
    [viewDidLayoutSubviews]
    [willAnimateRotationToInterfaceOrientation:duration:]
    [didRotateFromInterfaceOrientation:]

        在IOS6中,此顺序如下:

    [shouldAutorotate]
    [supportedInterfaceOrientations]
    [willRotateToInterfaceOrientation:duration:]
    [viewWillLayoutSubviews]
    [viewDidLayoutSubviews]
    [willAnimateRotationToInterfaceOrientation:duration:]
    [didRotateFromInterfaceOrientation:]

    当开始调用willRotateToInterfaceOrientation:duration时,当前所有布局都还没有变

    当开始调用willAnimateRotationToInterfaceOrientation:duration:时,所有界面的布局已经根据autoresize机制或者autolayout机制变更完毕,开发者只是在此函数中可以提供更多的布局配置

    当开始调用didRotateFromInterfaceOrientation时,所有关于旋转的布局已经全部完成。

    3.多层UIViewController

    就像UIView可以addSubview和removeFormSuperview般,IOS5之后,UIViewController也能够进行多层次的叠加

    UIViewController的多层编程API和UIView相似

    -(void)addChildViewController:(UIViewController *)childController
    -(void)removeFromParentViewController

    UIViewController的多层开发比UIView的多层开发更为便捷,之所以这么说,是因为控制器所能做的事情往往不仅在于动作,更在于系统对于控制器回调函数的支持力度。

    就像UIViewController,如果我们在他的子系统中重写方法

    -(void)willMoveToParentViewController:(UIViewController *)parent
    -(void)didMoveToParentViewController:(UIViewController *)parent

    那么控制器就能完全掌握多层次叠加和撤销的过程,作为childViewController的UIViewController对象,会在父UIViewController将自己加到多层结构时调用willMoveToParentViewController,会在父UIViewController将自己撤销多层结构时调用didMoveToParentViewController

  • 相关阅读:
    Python环境搭建和开发工具的配置
    教材,教材,国内的教材你为何如此不堪入目?码农,码农,你到底该如何脱离码农?
    从一个新手容易混淆的例子简单分析C语言中函数调用过程
    E3: PS4/PC 莎木3 众筹200万美元 9小时内达成
    [原] blade中C++ singleton的实现
    [百度空间] [转] 四元数(Quaternions)
    [百度空间] [原]DLL导出实例化的模板类
    [百度空间] [转]DLL地狱及其解决方案
    [百度空间] [转+原]虚析构函数
    [百度空间] [转]程序员趣味读物:谈谈Unicode编码
  • 原文地址:https://www.cnblogs.com/haibosoft/p/3656908.html
Copyright © 2011-2022 走看看