编写下面直接提到的代码后,

//
//  FirstCustomSegue.swift
//  Prayer
//
//  Created by Jae Hyun Kim on 8/9/15.
//  Copyright (c) 2015 Jae Hyun Kim. All rights reserved.
//

import UIKit

class FirstCustomSegue: UIStoryboardSegue {
    override func perform() {
        var firstVCView = self.sourceViewController.view as UIView!
        var secondVCView = self.destinationViewController.view as UIView!
        let screenWidth = UIScreen.mainScreen().bounds.size.width
        let screenHeight = UIScreen.mainScreen().bounds.size.height
        secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)
    }
}

我正在阅读的教程中的一条语句说:“目前,第二个视图控制器的视图还不是应用程序窗口的子视图。因此,在实现实际动画之前,很明显,我们必须添加将其添加到窗口中。这将通过应用程序窗口对象的insertSubview(view:aboveSubview :)方法实现。如您所见,首先访问窗口对象,然后添加目标视图:“然后,他去了添加以下代码:
override func perform() {
    ...

    // Access the app's key window and insert the destination view above the current (source) one.
    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(secondVCView, aboveSubview: firstVCView)

}

但是,我不确定他说“在这一点上,第二个视图控制器的视图不是子视图……等等……”是什么意思?我将更具体地说明我对语句的疑问,例如“subview”是什么意思。但是我对声明的几乎所有内容感到困惑。对不起 :(

这个secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)语句是什么意思?

最佳答案

视图层次结构是了解有关iOS用户界面的一个核心元素。它基本上说屏幕上的所有视图彼此之间都有某种关系-子视图,父视图,兄弟视图。

  • 子视图只是嵌套在另一个视图中的视图,并且是该视图的子视图
  • 父视图/ super 视图是对应的-嵌套在其中的视图是其 super 视图
  • 兄弟视图是包含在同一父视图
  • 中的视图

    请注意,对于不同的视图,视图可以同时是所有三个角色。如果viewA包含viewBviewC,而viewB包含viewD,则
  • viewAviewBviewC的总览
  • viewBviewCviewA的子视图
  • viewAviewB是 sibling
  • viewBviewD的 super 视图
  • viewDviewB的子视图
  • => viewB履行所有三个角色。

  • 屏幕上的所有内容都必须是视图层次结构的一部分,操作系统才能确定要渲染的位置。

    关于视图层次结构的一个非常重要的事情是视图的相对位置。定位始终是相对于 super 视图的。在同级视图及其父视图之间,可以设置设置布局约束(->自动布局)来管理其布局。

    请注意,这是一个简短的概述,还远远不够完善,我强烈建议您至少阅读一次有关 view hierarchy 的苹果文档。

    现在关于您的问题:

    “在这一点上,第二个视图控制器的视图不是子视图……等等……这是什么意思?

    这就是说的意思,视图不是所解释的层次结构的一部分。因此,操作系统尚不知道将其放置在何处-实际上,它甚至根本不知道它应该呈现它。要解决此问题,您必须通过选择视图并将新视图作为子视图添加到层​​次结构中的某个位置来添加视图。

    这个secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)语句是什么意思?

    该行将frame框架的secondVCView属性设置为等于具有指定尺寸的新创建的CGRectframe确定视图的位置和大小。理解 property 及其对应物对于理解视图及其层次结构如何工作同样重要。幸运的是,有this answer on SO很好地涵盖了该主题。

    关于ios - 了解iOS中的 View 层次结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31907863/

    10-11 19:51