Перемещение слайдера в течение определенного времени - PullRequest
1 голос
/ 12 января 2012

У меня есть слайдер с 96 слотами, и мне нужно перемещать слайдер шаг за шагом от 0 до 95 за 60 секунд.Должен ли я использовать NSTimer с интервалом (60/96) и 96 повторений или есть лучшее решение для этого?

Ответы [ 2 ]

1 голос
/ 31 августа 2012
            aTimer = [NSTimer timerWithTimeInterval:(1.0) target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

            NSRunLoop *runner = [NSRunLoop currentRunLoop];
            [runner addTimer:aTimer forMode: NSDefaultRunLoopMode];

        - (void)timerFired:(NSTimer*)theTimer {

                  slider.maximumValue=totaltime;

                if(slider.value ==totaltime)
                { 
                    [theTimer invalidate];
                   //terminate the loop
        }
    else
    {
    slider.value=slider.value+1;
    }
    }

//timer runs continuously run if condition is true
1 голос
/ 12 января 2012

Это, наверное, лучший подход. NSTimer должен вести себя достаточно стабильно на этом интервале, он только начинает становиться ненадежным, вызывая его примерно каждые 1/10 секунды или быстрее.

Однако, немного объяснений на случай, если он не будет вести себя так, как вы надеялись:

Это не будет идеально, потому что NSTimer не имеет своего тикового события буквально каждый интервал. Скорее, NSTimer находится во власти цикла его потока, который может не успеть вызвать ваш метод @selector до тех пор, пока не истечет его интервал. Затем объедините это с вызовом обновлений экрана, которые также не являются блокировкой шага.

Точность в основном будет зависеть от того, что еще вы делаете в цикле выполнения ... если в мозгу вашего устройства ничего особенного не происходит, тогда ваш слайдер должен двигаться так, как вы надеялись.

Редактировать: Вы также можете рассмотреть NSTimer с более длинным интервалом и использовать методы aniveWithDuration ... UIView ..., чтобы он выглядел гладким?

...