编写下面直接提到的代码后,
//
// 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用户界面的一个核心元素。它基本上说屏幕上的所有视图彼此之间都有某种关系-子视图,父视图,兄弟视图。
请注意,对于不同的视图,视图可以同时是所有三个角色。如果
viewA
包含viewB
和viewC
,而viewB
包含viewD
,则viewA
是viewB
和viewC
的总览viewB
和viewC
是viewA
的子视图viewA
和viewB
是 sibling viewB
是viewD
的 super 视图viewD
是viewB
的子视图viewB
履行所有三个角色。 屏幕上的所有内容都必须是视图层次结构的一部分,操作系统才能确定要渲染的位置。
关于视图层次结构的一个非常重要的事情是视图的相对位置。定位始终是相对于 super 视图的。在同级视图及其父视图之间,可以设置设置布局约束(->自动布局)来管理其布局。
请注意,这是一个简短的概述,还远远不够完善,我强烈建议您至少阅读一次有关
view hierarchy
的苹果文档。 现在关于您的问题:
“在这一点上,第二个视图控制器的视图不是子视图……等等……这是什么意思?
这就是说的意思,视图不是所解释的层次结构的一部分。因此,操作系统尚不知道将其放置在何处-实际上,它甚至根本不知道它应该呈现它。要解决此问题,您必须通过选择视图并将新视图作为子视图添加到层次结构中的某个位置来添加视图。
这个
secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)
语句是什么意思?该行将
frame
框架的secondVCView
属性设置为等于具有指定尺寸的新创建的CGRect
。 frame
确定视图的位置和大小。理解 property 及其对应物对于理解视图及其层次结构如何工作同样重要。幸运的是,有this answer on SO很好地涵盖了该主题。关于ios - 了解iOS中的 View 层次结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31907863/