2012-05-03 5 views
0

Я пытаюсь реализовать UIProgressView, который непрерывно завершается в течение 10 секунд. Я использую NSTimer, чтобы попытаться достичь этого, но мне сложно понять это. Я консультировался с документацией на UIProgressView и NSTimer, а также на других опубликованных вопросах, пожалуйста, помогите мне, если сможете.Реализация обратного отсчета с помощью UIProgressView и NSTimer

Моя текущая реализация не обновляет представление UIProgress. Исходный код приведен ниже:

- (void)updateTimer:(NSTimer *)timer 
{ 
    // sets timer 
    [self setTimer:[NSTimer scheduledTimerWithTimeInterval:0.25f 
                target:self 
               selector:@selector(updateTimer:) 
               userInfo:nil 
               repeats:YES]]; 
    float newProgress = [self.timeProgressView progress] + 0.025; 
    [self.timeProgressView setProgress:newProgress animated:YES]; 
} 

Любая помощь приветствуется.

+0

подключен ваш UIProgressView к IBOutlet или добавлены как подвид где-нибудь? –

ответ

1

Попробуйте настроить метод

[self setTimer:[NSTimer scheduledTimerWithTimeInterval:0.25f 
                target:self 
               selector:@selector(updateTimer:) 
               userInfo:nil 
               repeats:YES]]; 

вне updateTimer, если это не вызывается каждый 0,25 секунды.

или:

- (void)setupTimerWithTimer:(NSTimer *) timer{ 
[self setTimer:[NSTimer scheduledTimerWithTimeInterval:0.25f 
                 target:self 
                selector:@selector(updateTimer) 
                userInfo:nil 
                repeats:YES]]; 
} 

- (void)updateTimer{ 
    float newProgress = [self.timeProgressView progress] + 0.025; 
    [self.timeProgressView setProgress:newProgress animated:YES]; 
} 
4

попробовать это

progressView.progress = 1; 
    time = 1; 
    timer = [NSTimer scheduledTimerWithTimeInterval: 0.1f 
                                             target: self 
                                           selector: @selector(updateTimer) 
                                           userInfo: nil 
                                            repeats: YES]; 

-(void) updateTimer 
{ 
    if(time <= 0.0f) 
    { 
        //Invalidate timer when time reaches 0 
        [timer invalidate]; 
    } 
    else 
    { 
        time -= 0.01; 
        progressView.progress = time; 
    } 
} 
+0

Elppa, спасибо, что ответили! Пробовал это прямо сейчас, обходя вокруг переменной 'time',« Invalid Operands to binary expression », потому что он считает, что« время »- это объект времени, а не float, но я не знаю, как использовать« время »в updateTimer, если я объявляю его вне функции. Извиняюсь, если я пропущу что-то очевидное и еще раз спасибо за вашу помощь. –

+0

Время объявлено как поплавок? Вероятно, вы должны сначала установить его на 1.0f. –

+1

переменная с плавающей запятой под названием 'time – Deepesh