У меня есть ползунок с 96 слотами, и мне нужно перемещать ползунок шаг за шагом от 0 до 95 за 60 секунд. Должен ли я использовать NSTimer с интервалом (60/96) и 96 повторами или есть лучшее решение для этого?Перемещение ползунка в течение определенного времени
ответ
Это, вероятно, лучший подход. NSTimer
должен вести себя довольно последовательно на этом интервале, он только начинает становиться ненадежным при вызове его каждые 1/10 секунды или быстрее.
Однако, немного объяснений в случае, если он не совсем себя так, как вы надеялись:
Это не будет совершенным, потому что NSTimer
не имеет это событие галочки буквально каждый интервал. Скорее, NSTimer
находится во власти цикла потока, который может не вызвать вызов метода @selector
до тех пор, пока не истечет его интервал. Затем объедините это с вызовом обновлений экрана, которые также не являются блокирующими.
Точность будет в значительной степени зависеть от того, что еще вы делаете в своем запуске ... если в мозгу вашего устройства мало что происходит, тогда ваш слайдер должен двигаться так, как вы надеялись.
Редактировать: Вы также можете рассмотреть NSTimer с большим интервалом и использовать методы анимации UIViewWithDuration ..., чтобы сделать его гладким?
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
NSTimer не имеет метода 'isinValid'. – Rengers