在我的容器 Controller 中,用户可以平移 View 以切换到不同的 View 。当平移手势开始时,它会将新 View Controller 的 View 添加到 View 中:view.insertSubView(view:, atIndex:)
经过一番研究,我注意到这一步大约需要 0.03 秒(而其他的都是 0.001-0.002 秒)。这会导致过渡有点不顺畅,这有点烦人。
View Controller 是在应用程序开始时使用 Storyboard作为全局创建的。
另外,这只会在第一次加载 View 时发生。之后的转换都很流畅。
我可以做些什么来预加载 View ,以便在第一次加载时不会花费这么“长”的时间?
biên tập:
周围环境:
var pendingViewController: UIViewController! {
didSet {
if let pending = pendingViewController {
addChildViewController(pending)
let index = view.subviews.count - 1
NSLog("start insert view test")
view.insertSubview(pending.view, atIndex: index)
NSLog("end insert view test")
pending.didMoveToParentViewController(self)
}
}
}
因为它只在第一次加载 View 时发生,我认为问题可能出在 viewDidLoad
Và viewWillAppear
的某个地方。结果如下所示。只有 viewDidLoad
花费了少量时间(0.005 秒)。虽然在到达 viewDidLoad
之前有 0.02 秒的间隔,但我不知道它可能是什么。
2015-12-17 15:15:57.116 Valor[777:232799] start insertView view test
2015-12-17 15:15:57.136 Valor[777:232799] start viewDidLoad test
2015-12-17 15:15:57.141 Valor[777:232799] end viewDidLoad test
2015-12-17 15:15:57.142 Valor[777:232799] start viewWillAppear test
2015-12-17 15:15:57.144 Valor[777:232799] end viewWillAppear test
2015-12-17 15:15:57.146 Valor[777:232799] end insertView view test
使用工具找出慢速代码发生的位置,而不是记录带有时间戳的语句。这将向您显示(包括系统调用)确切时间花在了哪里。
由于布局原因,插入 subview 可能会很慢。但是,您的跟踪(例如它)表明时间用于创建和加载 View Controller 的 View 。你说这个观点来自 Storyboard。里面有什么?加载此 View 时会触发多少其他事情?使用时间分析器,您将能够分辨出来。它可以像一个属性一样简单,你给它一个默认值,而不是一个惰性值。
The view controller is created at the beginning of the app as a global, using the storyboard.
如果是这种情况,那么您可以通过执行以下操作来强制加载 View Controller 的 View
let hack = viewcontroller.view
访问 View Controller 的 view
属性会导致它从 Storyboard加载 View 。
Tôi là một lập trình viên xuất sắc, rất giỏi!