iOS生命周期简单演示

项目可直接在https://code.youkuaiyun.com/netluoriver/ios_liftcircle下载


新建一个项目,在UIViewController中Modal出lifeCircleViewcontroller,在UIViewController中添加如下代码:


//
//  ViewController.swift
//  生命周期演示
//
//  Created by LeeMinglu on 15/10/23.
//  Copyright © 2015年 http://blog.youkuaiyun.com/netluoriver. All rights reserved.

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    
    //点击屏幕Modal出生命周期的控制器
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        let vc = lifeCircleViewController()
        presentViewController(vc, animated: true, completion: nil)
        
    }

}
</span>

新建lifeCircleViewController.swift,其中代码显示如下:


//
//  lifeCircleViewController.swift
//  生命周期演示
//
//  Created by LeeMinglu on 15/10/23.
//  Copyright © 2015年 http://blog.youkuaiyun.com/netluoriver. All rights reserved.

import UIKit

class lifeCircleViewController: UIViewController {
    
        
    override func loadView() {
        
        view = UIView()
        
        view.backgroundColor = UIColor.greenColor()
        print("\(__FUNCTION__) frame: \(view.frame)")
        
    }
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    
    
    //点击屏幕后dismiss控制器
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        dismissViewControllerAnimated(true, completion: nil)
    }
    


}


编译运行,在iPhone6,4.7寸屏幕下,在控制台中打印结果如下:

<span style="font-size:18px;">loadView() frame: (0.0, 0.0, 0.0, 0.0)
viewDidLoad() frame: (0.0, 0.0, 0.0, 0.0)
viewWillAppear frame: (0.0, 0.0, 0.0, 0.0)
viewWillLayoutSubviews() frame: (0.0, 0.0, 375.0, 667.0)
viewDidLayoutSubviews() frame: (0.0, 0.0, 375.0, 667.0)
viewDidAppear frame: (0.0, 0.0, 375.0, 667.0)</span>

上面的顺序就是iOS加载控件的顺序,初始化时如果没有指定view的frame,在viewWillLayoutSubviews之前view的尺寸都为0


自定义一个lifeCircleView.swift,在lifeCircleView中加入layoutSubViews,代码如下:

//
//  lifeCircleView.swift
//  iOS生命周期简单演示
//
//  Created by LeeMinglu on 15/10/24.
//  Copyright © 2015年 http://blog.youkuaiyun.com/netluoriver. All rights reserved.
//

import UIKit

class lifeCircleView: UIView {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.redColor()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        print("\(__FUNCTION__) frame: \(frame)")
    }

}


在lifeViewController.swift中修改代码如下:

//
//
//  lifeCircleViewController.swift
//  生命周期演示
//
//  Created by LeeMinglu on 15/10/23.
//  Copyright © 2015年 http://blog.youkuaiyun.com/netluoriver. All rights reserved.

import UIKit

class lifeCircleViewController: UIViewController {
    
        
    override func loadView() {
        view = UIView()
        view.backgroundColor = UIColor.greenColor()
        print("\(__FUNCTION__) frame: \(view.frame)")

        
        
        let lifeCircle = <span style="color:#ff6666;">lifeCircleView()

        //将自定义的lifeCircleView视图添加到lifeCircleViewController中
        view.addSubview(lifeCircle)
        
        //设置自动布局
        //取消translatesAutoresizing布局
        lifeCircle.translatesAutoresizingMaskIntoConstraints = false
        
        //设置View的自动布局
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[lifeCircle]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["lifeCircle" : lifeCircle]))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[lifeCircle]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["lifeCircle" : lifeCircle]))
        </span>
    }
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("\(__FUNCTION__) frame: \(view.frame)")
    }
    
    
    
    //点击屏幕后dismiss控制器
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        dismissViewControllerAnimated(true, completion: nil)
    }
    
}


自定义view后的运行后结果如下:

loadView() frame: (0.0, 0.0, 0.0, 0.0)
viewDidLoad() frame: (0.0, 0.0, 0.0, 0.0)
viewWillAppear frame: (0.0, 0.0, 0.0, 0.0)
viewWillLayoutSubviews() frame: (0.0, 0.0, 375.0, 667.0)
viewDidLayoutSubviews() frame: (0.0, 0.0, 375.0, 667.0)
layoutSubviews() frame: (0.0, 0.0, 375.0, 667.0)
viewDidAppear frame: (0.0, 0.0, 375.0, 667.0)


而且得出一个结论:iOS控件的布局都是在 LayoutSubviews中进行的.


lifeCircleViewController


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值