1

96 スロットのスライダーがあり、スライダーを 60 秒で 0 から 95 まで段階的に移動する必要があります。間隔 (60/96) と 96 回の繰り返しで NSTimer を使用する必要がありますか、それともより良い解決策がありますか?

4

2 に答える 2

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
于 2012-08-31T08:56:54.513 に答える
1

それがおそらく最良のアプローチです。はそのNSTimer間隔でかなり一貫して動作するはずですが、1/10 秒ごと、またはそれより速く呼び出すと信頼性が低下し始めます。

ただし、期待どおりに動作しない場合に備えて、少し説明します。

文字通りすべての間隔でNSTimerティックイベントがないため、完璧ではありません。むしろ、スレッドの実行ループに翻弄されており、その間隔が切れてからしばらくたってからメソッドを呼び出すことができない場合があります。次に、それをロックステップではない画面更新の呼び出しと組み合わせます。NSTimer@selector

その精度は主に、実行ループで他に何をしているかに依存します... デバイスの小さな頭脳であまり処理が行われていない場合、スライダーは期待どおりに動いているように見えるはずです。

編集:より長い間隔で NSTimer を検討し、UIView の animateWithDuration... メソッドを使用して滑らかに見せることもできますか?

于 2012-01-12T18:08:10.397 に答える