2010-10-21 1 views
7

J'ai un NSTtimer mis en application et cela fonctionne bien. J'ai également l'argument d'intervalle de temps connecté à un UISlider pour le iPhone. Cependant, lorsque je change sa valeur, le NSTimer est toujours en cours d'exécution à l'intervalle de temps d'origine, il n'est pas mis à jour. Comment puis-je implémenter un NSTimer et le faire changer son intervalle de temps comme la valeur de mes modifications UISlider. Ci-dessous la ligne que j'utilise pour le NSTimer.Comment est-ce que je peux mettre à jour mon NSTimer pendant que je change la valeur de l'intervalle de temps

[NSTimer scheduledTimerWithTimeInterval:mySlider.value 
           target:self 
           selector:@selector(myMethod) 
           userInfo:nil 
           repeats:YES]; 

Je veux à jour constamment intervalle de temps avec la valeur du UISlider.

Répondre

6

Vous ne pouvez pas avoir peur. Invalidez-le avec:

[myTimer invalidate]; 

Ensuite, créez-en un nouveau à la nouvelle heure. Vous devrez peut-être le régler à zéro en premier.

myTimer = nil; 
myTimer = [NSTimer scheduledTimerWithTimeInterval:mySlider.value 
              target:self 
             selector:@selector(myMethod) 
             userInfo:nil 
              repeats:YES]; 
+0

pensez-vous que c'est la voie à suivre si je veux mettre en œuvre un mode d'éclairage stroboscopique pour allumer et éteindre l'iPhone 4 LED – cgossain

+0

Si vous voulez une minuterie variable c'est. Pensez à la possibilité d'avoir deux minuteurs décalés les uns par rapport aux autres, bien que cela puisse ne pas fonctionner pour votre application. – Ben

+0

très bien merci pour votre aide, je vais voir si je peux le faire fonctionner. – cgossain

0

Vous pouvez faire quelque chose comme ceci en utilisant GCD

NSTimeInterval timeInterval=1; 
BOOL timerInvalidate=NO; 
dispatch_async(dispatch_get_global_queue(0, 0), 
       ^{ 
        while (!timerInvalidate){ 
        dispatch_async(dispatch_get_global_queue(0, 0), 
        ^{ 
        //your code; 
        }); 
        [NSThread sleepForTimeInterval:timeInterval]; 
        } 

       }); 

Et changer la valeur de timeInterval d'autre où dans le code.

Questions connexes