dynamic更新UILabel

我有一个关于UILabels的问题。 我甚至不知道这是正确的方法来解决这个问题,但我想更新一个UILabel从0到24显示两个数字,然后循环回零,并再次显示数字序列。 值得注意的是,它需要每隔1/24秒更新一次UILabel。 这是我到目前为止的代码…

-(void)viewDidLoad { fpsTimer = [NSTimer scheduledTimerWithTimeInterval: .01 target: self selector: @selector(updateFpsDisplay) userInfo: nil repeats: YES]; } - (void)updateFpsDisplay { for (int i=0; i<100; i++) { NSLog(@"%d", i%24); [timecodeFrameLabel setText:[NSString stringWithFormat:@"0%d", i%24]]; } } 

此代码在运行时成功地在控制台的循环中打印出数字1-24,但名为“timecodeFrameLabel”的UILabel只显示03并且不会更改。

有什么build议么?

这里有两个问题。 首先是你的-updateFpsDisplay方法循环从0到99,每次循环都改变标签。 但是,标签实际上不会重新绘制,直到控制权返回到运行循环。 所以,每0.01秒,您将标签更改100次,然后显示更新一次。 摆脱循环,让你的计时器告诉你什么时候更新标签,当你这样做,只更新一次。 你会想要把你的计数器variablesi做一个实例variables(希望有一个更具描述性的名字),而不是该方法的本地variables。

 - (void)updateFpsDisplay { // the ivar frameCount replaces i [timecodeFrameLabel setText:[NSString stringWithFormat:@"0%d", frameCount%24]]; } 

第二个问题是100不是24的倍数。当你说99%24 == 3,这就是为什么你的标签总是说“3”。 如上所述更改代码之后,在方法-updateFpsDisplay添加一个检查,以便frameCount在每次达到0时重置,如下所示:

 if (frameCount % 24 == 0) { frameCount = 0; } 

这将防止frameCount变得如此之大,以至于在某个点上翻滚。