2012-04-29 33 views
0

我有一个简单的表单。有很多元素。我希望用户能够看到显示器对某些元素的暂时变化。我设置了更改(在多个对象上更改Alpha),在数据库中执行一些操作,sleep(1)恢复Alpha设置,然后继续。睡眠(1)非常明显,但是物体并没有明显的改变。强制显示图形更改在方法执行期间

我假设睡眠在我的方法里面,它假定方法必须在更新显示之前完成。有没有办法强制显示图形变化?

谢谢你堆

回答

0

主线程运行一个所谓的运行循环。它基本上是这样的:

  • 查询传入的事件(触摸,定时器,可能是I/O等)。
  • 对这些事件做出反应。
  • 更新用户界面。
  • 重复。

您的代码通常运行在“对事件作出反应”阶段。你改变UI对象,但是当你睡觉时“更新UI”部分不能执行睡眠已经完成。只要您睡在主线程上,就不会发生UI更新或动画,并且不会触摸处理。这就是为什么你永远不会阻止主线程。

所以你需要你改变你的方案是异步的,例如通过使用performSelector:withObject:afterDelay:dispatch_after。或者,如果您只是在做简单的动画,您可能需要使用animateWithDuration:animations:completion:和朋友。

如果你需要做一些不能异步完成的事情,你想在不同的线程中运行它。然后在主线程上执行UI更新,或者使用performSelectorOnMainThread:withObject:waitUntilDone:dispatch_sync or dispatch_async(几乎所有UI更新都需要在主线程上完成)。

+0

谢谢,我猜到了,但你永远不知道,直到你问。计划B的时间,不如可爱但有效..... :-) –