2013-04-30 50 views
2

我在viewDidLoad方法中向我的视图控制器的根视图添加了一些子视图。不久之后,当某个事件发生时,我只是简单地改变其中一个视图的背景颜色。直到子视图重新布局(willLayoutSubviews被调用)后,此更改才可见。如果更改设备的方向或等待10-20秒,则会发生这种情况。我在修改后在子视图上打电话setNeedsDisplay,但没有帮助。总之,我只是想在某个事件发生后改变一个子视图的背景颜色,而且我希望这些更改可能在一秒钟内在屏幕上可见。我错过了什么?UIView - 子视图内容不会重绘,直到子视图再次布局。为什么?

注意:万一它很重要,有问题的视图的超级视图是GLKView

+1

你是否偶然从后台线程执行这些更新? – jszumski 2013-04-30 20:41:10

+0

想想吧,我正在执行代理方法回调中的这些更新,事实上,这是在异步调度队列中运行的。我现在使用'performSelectorOnMainThread'来确保更新在主线程中执行。随意添加答案作为答案,我会将其标记为正确。谢谢! – bsirang 2013-04-30 21:34:11

回答

2

确保您只是从主线程进行UI更新。您可以通过使用performSelectorOnMainThread:withObject:waitUntilDone:dispatch_async(dispatch_get_main_queue(), ^{/* your UI modifying code here */});来解决此问题。

+0

我正在使用'performSelectorOnMainThread:withObject:waitUntilDone:',它现在按预期工作。 – bsirang 2013-04-30 21:44:27

相关问题