3

当用户与下方呈现的视图交互时,如何实时更新卷曲视图presentModalViewController:

我想要的行为:

  1. 用户点击视图设置按钮。
  2. 用户点击视图设置屏幕中的控件。视图不会关闭视图设置,而是在后台自动更新。
  3. 用户点击某些东西来关闭视图设置。

想象一下,如果在 Maps 中点击 Map、Satellite、Hybrid 并没有自动展开而是更新了显示。

我能够收到通知,从设置控制器更改回主视图控制器。主视图控制器可以更新并发出信号,表明它应该重绘自身的一部分,但实际上更新屏幕是间歇性的。它将连续工作 5 次,然后不工作几次,然后再连续工作 5 次。然而,关闭模态视图总是会赶上下面的视图,所以我假设我的视图的渲染图像有时会被缓存或尽管我的请求没有被重绘。但我想不出一种方法来验证这一点。

这发生在设备和模拟器上。

4

1 回答 1

1

虽然这种行为可能有多个根本原因,但这是我看到的一个常见问题,它导致 UIKit 视图的“延迟”或“间歇”更新。

如果更新呈现视图(或呈现视图)的语句在主队列以外的调度队列中运行,UIKit 可能会在实际 UI 更新中产生不一致的结果和时间。您通常可以通过在更新 UI 的语句上放置断点并检查 Xcode 左侧调试器视图中显示的“队列”的名称来判断。它应该是“com.apple.main-thread”。如果不是,那可能是你的问题。这可能发生在很多委托方法中,例如网络 API。

尝试将您的 UI 更新包装在: dispatch_async(dispatch_get_main_queue(), ^() { ... }); 看看是否有帮助! 您应该只在需要时执行此操作,并一如既往地注意使用块安全技术。

我使用 iPad 模拟器在一个全新的 iOS 7.0.3 通用应用程序中对此进行了测试,该模拟器带有一个使用部分卷曲过渡呈现的视图控制器。通过使用我上面提供的代码中的后台队列来关闭呈现的视图时,我能够复制原始问题,包括间歇性更新和“快照”更新。一旦我切换到主队列,一切正常。

让我知道这是否有帮助或是否有其他问题:)

于 2014-02-25T23:33:47.743 回答