【发布时间】:2014-07-23 04:29:02
【问题描述】:
我的疑问是关于 Objective-C 中的 UI 更新。例如让我们考虑这段代码
myButton.hidden= YES;
文档说该按钮不会立即隐藏,但会在下一个运行循环中完成。实际隐藏需要多长时间。出于实际目的,它可以被认为是瞬时的吗? 我问这个问题是因为我需要在某个过程完成 70% 时隐藏一个按钮。
// on main thread
if (completionPercentage == 70)
{
myButton.hidden= YES;
// some other stuff
}
但在进程完成 70% 后,按钮可能会在几毫秒内保持可见,如果在此期间点击它,应用就会崩溃。
编辑: 我正在更新两个进程和取消按钮的功能。
Process1 正在NSThread 上运行。 myButton 的作用是取消正在运行 Process1 的线程。当 Process1 完成 70% 时,我 dispatch_asyncon HIGH_PRIORITY_QUEUE另一个使用来自 Process1 的数据的进程。让我们称之为Process2。因此,一旦 Process2 启动,就无法取消 Process1。
所以在上面提到的Ifblock 中,我隐藏了myButtononce Process1 完成了 70%。但它并没有立即隐藏因此问题。希望我已经说清楚了。
【问题讨论】:
-
你试过去 myButton.enabled = NO;或 myButton.userInteractionEnabled = NO;在隐藏之前?
-
@Zhang 我没有尝试过,但我怀疑 enabled 属性的行为也会相同。甚至它们会在下一个运行循环中生效。
-
在 dispatch_async 块中试试这个。
-
当你点击那个按钮时会执行什么?按钮点击方法是否取决于正在处理的某些数据?奇怪的是,点击一个没有连接任何东西的按钮会导致崩溃。也许您可以在执行预期代码之前检查您的按钮点击方法,completionPercentage >= 70?
-
请附加崩溃日志。
标签: ios objective-c ios7 uikit grand-central-dispatch