gpt4 book ai didi

swift - insertSubVIew 占用 "long"时间

转载 作者:行者123 更新时间:2023-11-28 12:58:59 31 4
gpt4 key购买 nike

在我的容器 Controller 中,用户可以平移 View 以切换到不同的 View 。当平移手势开始时,它会将新 View Controller 的 View 添加到 View 中:view.insertSubView(view:, atIndex:)

经过一番研究,我注意到这一步大约需要 0.03 秒(而其他的都是 0.001-0.002 秒)。这会导致过渡有点不顺畅,这有点烦人。

View Controller 是在应用程序开始时使用 Storyboard作为全局创建的。

另外,这只会在第一次加载 View 时发生。之后的转换都很流畅。

我可以做些什么来预加载 View ,以便在第一次加载时不会花费这么“长”的时间?

编辑:
周围环境:

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 时发生,我认为问题可能出在 viewDidLoadviewWillAppear 的某个地方。结果如下所示。只有 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 。

关于swift - insertSubVIew 占用 "long"时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335812/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com