Dynamically Updating a UILabel

There are two problems here. The first is that your -updateFpsDisplay method loops from 0 to 99, changing the label each time through the loop. However, the label won’t actually be redrawn until control returns to the run loop. So, every 0.01 seconds, you change the label 100 times, and then the display updates once. Get rid of the loop and let your timer tell you when to update the label, and when you do, update it just once. You’ll want to take your counter variable i and make that an instance variable (hopefully with a more descriptive name) rather than a variable local to that method.

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

The second problem is that 100 is not a multiple of 24. When you say 99 % 24 == 3, which is why your label always says “3”. After you’ve changed your code as described above, add a check to your method -updateFpsDisplay so that frameCount is reset each time it hits 0, like:

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

That’ll prevent frameCount from getting so large that it rolls over at some point.

Leave a Comment