iOS StoryBoard的转场Segue解读

本文参见美国斯坦福大学swift视频,并有所引用原文,特此声明

未完待续

在storyboard中,官方提供了多种转场方式,如图:

这里写图片描述

其含义如下:
1. Show 选项只会在一个导航控制器中用到
2. Show detail 是用于一个分屏控制器或者一个混合设置的,也就是有时你在分屏视图,有时你在导航视图
3. Present Modally 将占满整个屏幕然后展示这个新的 MVC
4. Present As Popover 选项将会把正在 segue 的东西展示在一个小的在最顶级的弹窗中
5. push 以及modal已经被遗弃了

一个控制器的出现的详细生命周期:

override func loadView()
override func viewDidLoad()
override func viewWillAppear(_ animated: Bool)
override func updateViewConstraints()
override func viewWillLayoutSubviews()
override func viewDidLayoutSubviews()
override func viewDidAppear(_ animated: Bool)

一个控制器的消失的详细生命周期:

override func viewWillDisappear(_ animated: Bool)
override func updateViewConstraints()
override func viewWillLayoutSubviews()
override func viewDidLayoutSubviews()
override func viewDidDisappear(_ animated: Bool) 

为了验证这个东西,我写了如下代码测试:

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print(#line)

    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print(#line)

    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print(#line)

    }
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print(#line)

    }
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print(#line)

    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print(#line)

    }
    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        print(#line)

    }
    override func loadView() {
        super.loadView()
        print(#line)

    }
    override func loadViewIfNeeded() {
        super.loadViewIfNeeded()
        print(#line)

    }
    override func updateViewConstraints() {
        super.updateViewConstraints()
        print(#line)

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print(#line)

    }

从而得出生命周期如上: 所以我们不能再viewdidload中设置任何有关于几何计算的东西,因为约束还没有建立起来,建议在viewdidappear中设置这些。

在没有navigationcontroller时:

原图:

转场为 – show、show detail、Present Modally、Present As Popover的图层分析:

这时候没有办法返回,需添加返回按钮,通过dismiss,由底部向上推出新的mvc,在iphone中测试并未发现不同。

但是当iphone横屏放置时:

会出现如图所示的状况,这个稍后解释。

此外当我们点击跳转时,捕获函数为:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        print("-----2222-----")
    }

我们可以通过上述方法来获知,UIStoryboardSegue 以及sender

UIStoryboardSegue: 这里有我们需要的属性

    open var identifier: String? { get }

    open var source: UIViewController { get }

    open var destination: UIViewController { get }

关于如何解决可选值 — optional?

if let name = Person().name {
//如果Person().name为空,则不会进行此步
}else{

}

由于在swift中可以通过?来指定可选值,所以我们可以通过此方法来解除这种为空的情况。当然更好的办法是可选值为空时设置为特定值,如:

if let name = Person().name ?? "quinn" {
    //如果Person().name为空,则赋值 "quinn"
}

在iPhone中并没有分屏控制器(splitcontroller)只存在与ipad以及横屏状态下的5.5寸iphone上。关于这个你可以查看斯坦福大学的视频。那个教授演示了这个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值