动态更新 UILabel
Posted
技术标签:
【中文标题】动态更新 UILabel【英文标题】:Dynamically Updating a UILabel 【发布时间】:2011-09-14 06:51:02 【问题描述】:我有一个关于 UILabel 的问题。我什至不确定这是否是正确的方法,但我正在尝试更新 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并且没有改变。
有什么建议吗?
【问题讨论】:
NSTextField waits until the end of a loop to update 的可能重复项。相同的潜在问题适用,即使该问题涉及 NSTextField 并且这是 UILabel。 【参考方案1】:这里有两个问题。首先是您的-updateFpsDisplay
方法从0 循环到99,每次循环都更改标签。然而,在控制返回到运行循环之前,标签实际上不会被重绘。因此,每 0.01 秒,您更改标签 100 次,然后显示更新一次。摆脱循环,让你的计时器告诉你什么时候更新标签,当你更新标签时,只更新一次。您需要将计数器变量 i
设为实例变量(希望具有更具描述性的名称),而不是该方法的本地变量。
- (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
变得如此之大以至于它在某个时候翻滚。
【讨论】:
这需要一些调整来完成我想要它做的事情,但它确实适用于在 UILabel 上显示 24fps。感谢您的帮助!以上是关于动态更新 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性