【问题标题】:Label loading slower than all other UI Views after segue在 segue 之后,标签加载速度比所有其他 UI 视图慢
【发布时间】:2015-03-24 21:49:19
【问题描述】:

我使用 performSegueWithIdentifier 函数启动一个转场,并且我在故事板上将转场声明为常规推送。知道屏幕上的每个元素都相对于屏幕的水平中心以及距顶部的空间或距底部的空间或垂直中心对齐也可能会有所帮助。

当 segue 发生时,所有按钮几乎立即出现在应用程序上。然后,大约 30 秒后,标签出现。

我正在使用 swift 和最新版本的 xCode,我正在 iPhone 6 模拟器上进行测试。

知道会发生什么吗?

提前致谢!

---- 更新---- 为了给您提供更多信息,该视图类似于滑动解锁 iPhone 后的锁定屏幕。每个数字键有 12 个按钮,以及返回和清除。 4 个空格来显示输入。当您单击一个数字时,4 个隐藏的“*”按钮会出现在每个空格的顶部。

所有这些都在 gui 中进行了布局,所以我确信 xml 看起来很糟糕(充满了几个“幻数”),但我会在这里发布:

http://pastebin.com/YAWRX9c4

---- 更新 2 ----

看起来这种行为只有在我进入场景时才会发生。如果我将场景设置为主场景,所有内容都会同时加载。

【问题讨论】:

  • 可以分享一些相关代码吗?也许推送控制器上有任何异步网络调用?
  • 应用中没有网络调用。我会用一些相关信息更新问题
  • XML 对于解决您的问题不是很有帮助(并且布局约束也不相关)。显示您在控制器中的代码。查看在前一个控制器中调用 segue 的方法可能也很有用。
  • 该项目位于github.com/wortman/stroll_safe_ios。这是 hackathon 代码,我们是 IOS 编码的新手,所以它很草率。 segue 调用位于主 ViewController.swift 中。它选择的控制器是 LockdownControllerViewController.swift(是的,我打算更改该名称)。谢谢!
  • 我还应该指定 Stroll Safe 标签和 Circle Progress Bar 在 github 上的版本中从 ViewController.swift 到 LockdownControllerViewController 的 segue 后 30 秒才加载

标签: ios uilabel segue


【解决方案1】:

您正在后台线程上执行 performSegue 调用——如果您不进行网络调用,在后台线程上执行任何 UI 操作几乎总是导致这种长时间延迟的原因。将该调用包装在一个 dispatch_async 块中,

dispatch_async(dispatch_get_main_queue(), {
      self.performSegueWithIdentifier("lockdownSegue", sender: nil)
})

【讨论】:

  • 谢谢!效果很好!那么 UI 点击事件是否发生在后台线程中?
  • @Noah,不,他们没有;所有 UI 事件都在主线程上。您的代码在 dispatch_async 块中有 performSegue 方法,该方法位于您在 enterReleaseState() 函数中进一步向上的全局队列中。这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多