我正在尝试创建一个 UILabel,它将在用户等待时通知用户正在发生的事情。然而 UILabel 总是延迟它的文本更新,直到系统再次空闲。
过程:
[infoLine performSelectorOnMainThread:@selector(setText:) withObject:@"Calculating..." waitUntilDone:YES];
[distanceManager calc]; // Parses a XML and does some calculations
[infoLine performSelectorOnMainThread:@selector(setText:) withObject:@"Idle" waitUntilDone:YES];
不应该 waitUntilDone 使这“立即”发生吗?
最佳答案
如果您在主 UI 线程上执行此操作,请不要使用 waitUntilDone。在完整 View 上执行 setText、setNeedsDisplay,设置 NSTimer 以在 1 毫秒后启动您接下来要执行的操作,然后从您的函数/方法返回。您可能必须将您的计算拆分为可以由计时器单独调用的卡盘,也许是带有 switch 语句(选择块、执行块、增加块索引、退出)的状态机,由计时器调用直到它完成。 UI 将在您的计算块之间跳转并更新内容。因此,请确保您的块相当短(我使用 15 到 200 毫秒)。
关于iphone - 如何立即更新 UILabel?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3607284/