iOS10 UI教程视图的生命周期

说到视图的生命周期一般都是指视图控制器的视图生命周期。在视图的声明周期中最主要的有8个方法,分别为loadView()、viewDidLoad()、viewWillAppear(_:)、viewWillLayoutSubviews()、viewDidLayoutSubviews()、viewDidAppear(_:)、viewWillDisappear(_:)、viewDidDisappear(_:),对于这几个方法的说明如表1-5所示。视图的生命周期的流程以及这些方法的调用时机如图1.29所示。

表1-5  方法介绍

方法

功能

loadView()

载入视图,通常这一步不需要去干涉。

viewDidLoad()

载入完成,可以进行自定义数据以及动态创建其他控件

viewWillAppear(_:)

视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

viewWillLayoutSubviews()

即将开始子视图位置布局

viewDidLayoutSubviews()

用于通知视图的位置布局已经完成

viewDidAppear(_:)

视图已在屏幕上渲染完成

viewWillDisappear(_:)

视图即将消失

viewDidDisappear(_:)

视图已经消失

 

图1.29  生命周期

注意:在图中给出了这些方法的调用顺序,当然需要注意这几个方法的调用是由iOS系统决定的,不需要读者自己调用。

【示例1-12:LifeCycle】以下将使用代码说明视图的生命周期中方法的执行顺序。具体的操作步骤如下:

(1打开Main.storyboard文件,从视图库中拖动Button按钮控件到主视图中,将Button的标题改为“移除视图”。

(2将Button按钮控件进行动作removeView的声明和关联。

(3打开ViewController.swift文件,编写代码,通过输出语句查看视图生命周期中方法的顺序。代码如下:

import UIKit

class ViewController: UIViewController {

    //载入完成

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

         print("viewDidLoad")

}

//轻拍按钮,移除视图控制器的视图

    @IBAction func removeView(_ sender: AnyObject) {

         view.removeFromSuperview()

}

//载入视图

    override func loadView() {

        super.loadView()

        print("LoadView")

}

//视图将出现在屏幕之前

    override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(true)

        print("viewWillAppear")

}

//视图已在屏幕上渲染完成

    override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(true)

        print("viewDidAppear")

}

//即将开始子视图位置布局

    override func viewWillLayoutSubviews() {

        super.viewWillLayoutSubviews()

        print("viewWillLayoutSubviews")

}

//视图的位置布局已经完成

    override func viewDidLayoutSubviews() {

        super.viewDidLayoutSubviews()

        print("viewDidLayoutSubviews")

}

//视图即将消失

    override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(true)

        print("viewWillDisappear")

}

//视图已经消失

    override func viewDidDisappear(_ animated: Bool) {

        super.viewDidDisappear(true)

        print("viewDidDisappear")

    }

……

}

  

此时运行程序,会看到如图1.30所示的效果。不仅如此,还会在应用程序输出窗口输出以下内容:

LoadView

viewDidLoad

viewWillAppear

viewWillLayoutSubviews

viewDidLayoutSubviews

viewDidAppear

  

当开发者轻拍“移除视图”按钮后,会看到视图控制器的主视图被移除,如图1.31所示。不仅如此,还会在应用程序输出窗口输出以下内容:

viewWillDisappear

viewDidDisappear

  

 

图1.30  初始状态                           图1.31  移除主视图

iOS10 UI教程视图的生命周期

相关阅读:iOS10 UI教程视图的绘制与视图控制器和视图

iOS10 UI教程视图的生命周期的更多相关文章

  1. iOS10 UI教程视图的绘制与视图控制器和视图

    iOS10 UI教程视图的绘制与视图控制器和视图 iOS10 UI视图的绘制 iOS10 UI教程视图的绘制与视图控制器和视图,在iOS中,有很多的绘图应用.这些应用大多是在UIView上进行绘制的. ...

  2. iOS10 UI教程视图调试

    iOS10 UI教程视图调试 iOS10 UI教程视图调试,当视图很复杂的时候,层次结构就不会很简单了.Xcode可以通过视图(View)调试帮助开发者解决层次结构复杂的问题.视图调试是在Xcode ...

  3. iOS10 UI教程视图和子视图的可见性

    iOS10 UI教程视图和子视图的可见性 iOS10 UI教程视图和子视图的可见性,一个父视图可以通过clipsToBounds属性,定义子视图在边界(边界就是父视图的框架也就是父视图可以显示的范围) ...

  4. iOS10 UI教程视图的中心位置

    iOS10 UI教程视图的中心位置 center表示的是视图的中心位置属性,这个属性在相对的UI层次结构上工作,和frame类似.center属性是一个在父视图上定义视图的位置的简便方法.center ...

  5. iOS10 UI教程视图的边界与视图的框架

    iOS10 UI教程视图的边界与视图的框架 iOS10 UI视图的边界 在视图的几何形状中我们提到了视图属性中的一部分属性可以将定义的视图绘制在屏幕上.其中典型的3个属性为边界属性.框架属性以及中心位 ...

  6. iOS10 UI教程视图的几何形状

    iOS10 UI教程视图的几何形状 视图属性中的一部分属性可以让定义的视图绘制在屏幕上.在讲解这些属性前,我们首先将讲解,定义视图的几何形状所涉及到的结构类型.这些结构类型如下: CGPoint:它表 ...

  7. iOS10 UI教程子视图和父视图UI层次结构和Views继承

    iOS10 UI教程子视图和父视图UI层次结构和Views继承 iOS10 UI教程子视图和父视图UI层次结构和Views继承,本节将讲解与UI层次结构和Views继承相关的内容,其中包括子视图和父视 ...

  8. iOS10 UI教程基改变视图的外观与视图的可见性

    iOS10 UI教程基改变视图的外观与视图的可见性 视图是应用程序的界面,是用户在屏幕上看到的对象.用户可以通过触摸视图上的对象与应用程序进行交互,所以视图界面的优劣会直接影响到了客户体验的好坏.和视 ...

  9. iOS10 UI教程层次结构的事件

    iOS10 UI教程层次结构的事件 iOS10 UI教程层次结构的事件,层次结构中存在7个事件,对于这些事件的介绍如表1-3所示.通过这些事件,可以监听视图,当视图在层次结构上发生变化时可以被拦截,也 ...

随机推荐

  1. 【轮子】发现一个效果丰富酷炫的Android动画库

    没有什么比发现一个好轮子更让人开心的了. 这个库分分钟提高交互体验 :AndroidViewAnimations 一张图说明一切 配置和使用也相当简单 GitHub地址

  2. 【python】lxml中多个xml采用相同节点时出现的问题

    今天突然发现了一个lxml的坑. 假设我们有一个节点 <id>123</id> 有两个父节点都要用上述节点,则必须把上面的节点写两遍!用同一个会出错! 出错例子: #!/usr ...

  3. CocoaPods安装教程

    Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage CocoaPods是什么? 当你开发iOS应 用时, ...

  4. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...

  5. 关于Cookie和Session的优缺点

    关于Cookie和Session的优缺点 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. Cookie的优缺点:优点:极高的扩展性和可用 ...

  6. Nodejs的第一个页面

    nodejs安装后如何查看和安装其他工具 网上nodejs的文章已经很多,这里只是写下自己的小小心得,如果能帮到别人当然更好. 安装nodejs这里就不叙述了,直接上nodejs官网下载就好了,初学者 ...

  7. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

    大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM ...

  8. Oracle双实例切换

    1.在Linux下切换: export ORACLE_SID=xxx1   sqlplus "/as sysdba" //进入sql   startup   //启动数据库实例1  ...

  9. viewpager中彻底性动态添加、删除Fragment

    为了解决彻底删除fragment,我们要做的是:1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就 ...

  10. 初学iPad开发入门

    iPad是一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间跟iPhone一样,搭载的是iOS操作系统 iPhone和iPad开发的区别 屏幕的 ...