Таймер Objective-c stringWithFormat

Я пытаюсь заставить таймер показывать счетчик, подобный этому «00:00:00». Вот мой текущий код. Я пытался заставить его работать с помощью stringWithFormat, что должно быть легко, но я думаю, мне придется настраивать форматы отдельно. У вас есть идеи, как это сделать?

- (void)TimerCount {
    CountNumber = CountNumber + 1;
    TimerDisplay.text = [NSString stringWithFormat:@"Hour: %0*i", length, hour];
}

person Weeb    schedule 03.04.2014    source источник
comment
Ваш код не соответствует вашему запросу (формату). Вам нужны часы, минуты и секунды, предположительно? Где вы их считаете? Что такое length и hour (int/float)?   -  person Wain    schedule 03.04.2014
comment
Я настроил их в файле .h, но на самом деле я думаю, что это работает лучше:   -  person Weeb    schedule 03.04.2014
comment
'-(void)TimerCount{ CountNumber = CountNumber + 1; TimerDisplay.text = [NSString stringWithFormat:@%.4d, CountNumber]; }'   -  person Weeb    schedule 03.04.2014
comment
Немного сумбурно, но я надеюсь, вы понимаете, что я имею в виду. У вас есть идея, как настроить часы, минуты и секунды?   -  person Weeb    schedule 03.04.2014
comment
Вы хотите, чтобы таймер отсчитывал время от нуля при запуске? А таймер срабатывает каждую секунду?   -  person Wain    schedule 03.04.2014
comment
Таймер запускается при нажатии кнопки. У меня есть кнопки запуска, остановки и сброса, которые отлично работают.   -  person Weeb    schedule 03.04.2014
comment
Мне просто нужна метка (которая показывает часы, минуты и секунды), чтобы иметь возможность показывать их в этом формате 00:00:00   -  person Weeb    schedule 03.04.2014
comment
Теперь это выглядит так 0:00 с этим кодом:   -  person Weeb    schedule 03.04.2014
comment
.h файл: 'целые часы; минут; целых секунд;'   -  person Weeb    schedule 03.04.2014
comment
.m файл: '-(void)TimerCount{ CountNumber = CountNumber + 1; TimerDisplay.text = [NSString stringWithFormat:@%d:%02d, часы, минуты, секунды]; }   -  person Weeb    schedule 03.04.2014


Ответы (2)


- (void)timerCount {

 {
    CountNumber = CountNumber + 1;
    NSInteger seconds = CountNumber % 60;
    NSInteger minutes = (CountNumber / 60) % 60;
    NSInteger hours = (CountNumber / 3600);
    TimerDisplay.text =  [NSString stringWithFormat:@"%i:%02i:%02i", hours, minutes, seconds];
}

Попробуйте приведенный выше код.

И настройте этот метод так, чтобы он запускался каждую секунду.

ВвидуDidLoad

NSTimer *counterTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                                        target:self 
                                                      selector:@selector(timerCount) 
                                                      userInfo:nil 
                                                       repeats:YES];
[[NSRunLoop mainRunLoop] addTimer: counterTimer forMode:NSRunLoopCommonModes];

И сохраните counterTimer как iVar, чтобы поддерживать его в рабочем состоянии до тех пор, пока VC не будет освобожден, если вы используете ARC.

person Selvin    schedule 03.04.2014
comment
Но я использую кнопки, пожалуйста, проверьте эти две ссылки. CodeFile — это файл .m, а AppCode2 — файл .h. dropbox.com/s/euzcos4vz64q86q/CodeFile.docx dropbox.com/s/9vixxlsuq6iogla/AppCode2.zip - person Weeb; 03.04.2014
comment
Оказывается, это все равно работает! :) - person Weeb; 03.04.2014
comment
Причина, по которой я упомянул кнопки, заключается в том, что тогда мне не нужен код viewDidLoad, но в любом случае он работает! :) - person Weeb; 03.04.2014

- (void)TimerCount
{
    CountNumber++;
    NSString *time = [[NSString alloc] init];
    NSUInteger seconds = CountNumber;
    NSUInteger minutes = 0;
    NSUInteger hours = 0;
    if (seconds > 59) {
        seconds -= 60;
        minutes++;
        if (seconds < 10) {
            time = [NSString stringWithFormat:@":0%i",seconds];
        } else time = [NSString stringWithFormat:@":%i",seconds];
    }
    if (minutes > 59) {
        minutes -= 60;
        hours++;
        if (minutes < 10) {
            time = [NSString stringWithFormat:@":0%i%@",minutes,time];
        } else time = [NSString stringWithFormat:@":%i%@",minutes,time];
    }
    if (hours < 10) {
        time = [NSString stringWithFormat:@"0%i%@",hours,time];
    } else time = [NSString stringWithFormat:@"%i%@",hours,time];

}

NSString *time — это время.

Также NSTimer для вызова этого метода каждую секунду:

NSTimer *counterTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                                        target:self 
                                                      selector:@selector(timerCount) 
                                                      userInfo:nil 
                                                       repeats:YES];
person Schemetrical    schedule 03.04.2014
comment
Я не понимаю, почему я получил отрицательный голос за это. Это буквально ответ. - person Schemetrical; 03.04.2014
comment
Я тоже не знаю почему. Я не проголосовал за это. Я проверю код и посмотрю, работает ли он. - person Weeb; 03.04.2014
comment
@Weeb Используйте NSTimer для вызова этого метода каждую секунду. - person Schemetrical; 03.04.2014
comment
Я считаю, что это работает отлично. Некоторый мой другой код просто должен соответствовать этому коду. Вот полный код .m: dropbox.com/s/euzcos4vz64q86q/CodeFile.docx - person Weeb; 03.04.2014
comment
Пустой TimerCount теперь работает, но мне просто нужен другой код, чтобы соответствовать новому коду в TimerCount. Когда я сейчас нажимаю кнопки (Пуск, Стоп и Сброс), ничего не происходит, но это в основном просто индикатор того, что пустота TimerCount работает, но другой код просто нужно немного отредактировать после того, как новый код был реализован в пустоте TimerCount. - person Weeb; 03.04.2014