动态更新 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的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 没有更新

iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性

如何为 UIButton 创建动态叠加层?

如何在表视图中正确设置动态标题视图?

使用发件人标签在 UIbutton 单击事件时更新 UITableViewCell 的标签

NGUI -- UILabel