如何使用swift

时间:2017-02-12 14:11:43

标签: ios swift load segue delay

当我从viewController A转到viewController B时,我遇到了一个问题,在转发之前它有大约5秒的延迟。我认为这是由于我在viewDidLoad中加载了大量的观点。

我有一个xib文件,其中包含11个表示级别的部分的堆栈视图。每个部分都有一个按钮和一些可以根据用户进度而变化的图像。

此外,我实例化了10个这些xib视图以加载到scrollview中。这一切都发生在viewDidLoad中。


我想知道我是否可以加载viewController B,并且在实际点击按钮之前准备就绪了;希望能解决我得到的延迟。我还在控制器中使用自定义segue。

我能得到的任何帮助表示赞赏。我自己已经对此进行过调查,但我发现的大多数主题都已过时,或者不适用。再次感谢您的任何指示。

更新:答案确实回答了我的问题的一部分,就如何为了效率目的而准备一个视图控制器,它没有回答延迟部分,但我想如果你阅读评论我想出来了低于答案...

1 个答案:

答案 0 :(得分:4)

您可以将viewDidLoad()中的所有繁重代码移到某个自定义方法

func prepare() {
 // Something hard 
}

比您可以随时准备控制器并存储

var heavyController: HeavyViewController?

override func viewDidLoad() {
  super.viewDidLoad()
  heavyController = HeavyViewController()
  heavyController?.prepare()
}

而不是在segue中使用heavyController而不是创建新的。希望这会有所帮助。

P.S。考虑将大部分代码移到后台线程中,您可以查看example

<强>更新 要使用segue显示准备好的控制器,请执行以下操作:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "HeavyController" {
        present(heavyController, animated: true, completion: nil)
    }
}