强制显示图形更改在方法执行期间

时间:2012-04-29 21:40:41

标签: iphone alpha

我有一个简单的表格。有许多要素。我希望用户看到显示器中的某些元素发生短暂变化。我设置了更改(在多个对象上更改alpha),在数据库中执行一些操作,sleep(1)还原alpha设置然后继续。睡眠(1)非常明显,但物体不会明显改变。

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

谢谢堆

1 个答案:

答案 0 :(得分:0)

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

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

您的代码通常在“响应事件”阶段运行。您更改了UI对象,但是当您睡眠时,“更新UI”部分无法执行睡眠已完成。只要您在主线程上休眠,就不会发生UI更新或动画,也不会处理任何触摸。这就是为什么你永远不会阻止主线程。

因此,您需要将方案更改为异步,例如使用performSelector:withObject:afterDelay:dispatch_after。或者,如果你只是做简单的动画,你可能想要使用animateWithDuration:animations:completion:和朋友。

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