2012-01-12 4 views
1

私は96スロットのスライダーを持っており、60秒間に0から95までスライダーを段階的に移動する必要があります。インターバル(60/96)と96リピートのNSTimerを使うべきでしょうか?それとももっと良い解決法がありますか?特定の時間にスライダーを動かす

答えて

1

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

、あなたが望んだだろうと、それは非常に動作しない場合は、説明のビット:

NSTimerは、それがダニだ持っていないので、それは完璧ではありませんイベント文字通りすべてのインターバル。むしろ、NSTimerは、そのスレッドの実行ループを慈悲にしています。間隔が終了してからしばらくすると、@selectorメソッドを呼び出すことができません。それから、ロック・ステップでもない画面更新を呼び出すことと組み合わせてください。

精度は主に実行ループで何をしているかによって決まります。デバイスの小さな脳にあまり進んでいない場合は、希望通りにスライダが動いているように見えます。

編集:NSTimerの間隔を長くし、UIViewのanimateWithDuration ...メソッドを使用して滑らかに見えるようにすることもできます。

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 
+0

NSTimerにはisinValidメソッドがありません。 – Rengers

関連する問題