Здесь есть две проблемы. Во-первых, ваш -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
стать настолько большим, что в какой-то момент он перевернется.