我有一个简单的表格。有许多要素。我希望用户看到显示器中的某些元素发生短暂变化。我设置了更改(在多个对象上更改alpha),在数据库中执行一些操作,sleep(1)还原alpha设置然后继续。睡眠(1)非常明显,但物体不会明显改变。
我假设睡眠在我的方法中,它假定在更新显示之前必须完成该方法。有没有办法强制显示图形更改?
谢谢堆
答案 0 :(得分:0)
主线程正在运行一个所谓的运行循环。它基本上是这样的:
您的代码通常在“响应事件”阶段运行。您更改了UI对象,但是当您睡眠时,“更新UI”部分无法执行睡眠已完成。只要您在主线程上休眠,就不会发生UI更新或动画,也不会处理任何触摸。这就是为什么你永远不会阻止主线程。
因此,您需要将方案更改为异步,例如使用performSelector:withObject:afterDelay:
或dispatch_after
。或者,如果你只是做简单的动画,你可能想要使用animateWithDuration:animations:completion:
和朋友。
如果你需要做一些不能异步完成的事情,你想在另一个线程中运行它。然后使用performSelectorOnMainThread:withObject:waitUntilDone:
或dispatch_sync
or dispatch_async
在主线程上进行UI更新(几乎所有UI更新都需要在主线程上完成)。