0

我有一个简单的表格。有许多元素。我希望用户看到显示中某些元素的短暂变化。我设置了更改(更改多个对象的 alpha),在数据库中做一些工作,睡眠(1)恢复 alpha 设置,然后继续。睡眠 (1) 非常明显,但对象没有明显变化。

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

非常感谢

4

1 回答 1

0

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

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

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

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

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

于 2012-04-29T21:58:21.413 回答