Ios UIView-子视图内容是';在再次布置子视图之前,不要重新绘制。为什么?

Ios UIView-子视图内容是';在再次布置子视图之前,不要重新绘制。为什么?,ios,objective-c,uiview,Ios,Objective C,Uiview,我在viewDidLoad方法中将一些子视图添加到视图控制器的根视图中。不久之后,当某个特定事件发生时,我只需更改其中一个视图的背景色。在再次布局子视图之前,此更改不可见(willLayoutSubviews被调用)。如果我更改设备的方向或等待10-20秒,则会发生此情况。在进行更改后,我立即在子视图上调用setNeedsDisplay,但这没有帮助 总而言之,我只是尝试在某个事件发生后更改子视图的背景颜色,我希望这些更改在大约一秒钟内显示在屏幕上。我错过了什么 注意:如果有问题,该视图的超级视

我在
viewDidLoad
方法中将一些子视图添加到视图控制器的根视图中。不久之后,当某个特定事件发生时,我只需更改其中一个视图的背景色。在再次布局子视图之前,此更改不可见(
willLayoutSubviews
被调用)。如果我更改设备的方向或等待10-20秒,则会发生此情况。在进行更改后,我立即在子视图上调用
setNeedsDisplay
,但这没有帮助

总而言之,我只是尝试在某个事件发生后更改子视图的背景颜色,我希望这些更改在大约一秒钟内显示在屏幕上。我错过了什么


注意:如果有问题,该视图的超级视图是一个
GLKView

确保您仅从主线程进行UI更新。您可以通过使用
performSelectorOnMainThread:withObject:waitUntilDone:
dispatch\u async(dispatch\u get\u main\u queue(),^{/*您的UI在此处修改代码*/})来修复此问题

您是偶然从后台线程执行这些更新的吗?想想看,我是在委托方法回调中执行这些更新的,实际上,该回调在异步调度队列中运行。我现在使用
performSelectorOnMainThread
来确保在主线程中执行更新。请随意添加回答,我会将其标记为正确。谢谢我正在使用
performSelectorOnMainThread:withObject:waitUntilDone:
,它现在可以正常工作了。