在特定时间内移动滑块

时间:2012-01-12 16:29:40

标签: objective-c ios nstimer uislider nstimeinterval

我有一个带96个插槽的滑块,我需要在60秒内逐步从0到95移动滑块。我应该使用间隔(60/96)和96次重复的NSTimer还是有更好的解决方案?

2 个答案:

答案 0 :(得分:1)

这可能是最好的方法。 NSTimer应该在该间隔内表现得相当一致,只有在每1/10秒或更快的时间调用它时才开始变得不可靠。

然而,如果它没有像你希望的那样表现出一点解释:

它并不完美,因为NSTimer每个区间都没有它的嘀嗒事件字面上。更确切地说,NSTimer受其线程的运行循环的支配,它可能无法调用您的@selector方法,直到其间隔到期后的一段时间。然后将其与调用屏幕更新结合起来,这些更新也不是锁定步骤。

它的准确性主要取决于你在跑步循环中做的其他事情......如果你的设备的小脑中没有太多的东西,那么你的滑块应该像你希望的那样移动。 / p>

编辑:您也可以考虑使用更长间隔的NSTimer,并使用UIView的animateWithDuration ...方法使其显得平滑?

答案 1 :(得分:1)

            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