立即更新UILabel和UIButton

时间:2010-05-07 08:59:00

标签: iphone

在一个项目中,我用setText(UIButton的颜色)更改UILabel的文本,之后进行耗时的计算,然后是动画。

但是,在执行计算之后(以及动画开始之前)会反映文本和颜色的变化,但是我想在计算之前立即反映这些变化(因为你猜它是一个等待文本)

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

将计算移出主线程。

当运行循环获得时间时执行所有绘图。如果在主线程上执行计算,则会阻止运行循环,从而阻止绘制。计算完成后,使用performSelectorOnMainThread启动动画或计算完成时UI中需要发生的任何其他事情。

编辑:

在主线程上执行计算但让运行循环有机会更新UI的快速方法是使用延迟调用。使用0.1秒左右的延迟。你可以用NSTimer做同样的事情。这是在NSRunLoop.h

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

答案 1 :(得分:1)

如果您不需要响应式界面,而计算最简单的方法就是避免线程:将耗时的计算放在自己的方法中,然后使用[calculator performSelector:@selector(calculateThis:) withObject:myArgument afterDelay:0]开始。

这将允许运行循环更新您的界面更改,然后在主线程上开始计算(阻止它)。

答案 2 :(得分:0)

开始在后台线程中运行计算。

答案 3 :(得分:0)

我认为您最好的选择是在后台线程中执行耗时的动画。这样您的主UI线程就不会阻塞,文本和颜色会立即改变。此外,您的UI将在执行计算时保持响应。

一般来说,最好不要使用大量计算来阻止主线程,因为这会使应用程序的外观不是很敏感。