Question

Un bouton de mon interface, maintenu enfoncé , effectuera une série de modifications sur d'autres parties de mon interface.

Par exemple, pendant une seconde, un texte devient bleu, puis un UImageView changera d'image pendant deux secondes ... etc etc ...

Cette série de modifications continuera à suivre les mêmes étapes tant que le bouton est maintenu enfoncé.

Je n'ai jamais utilisé NSTimer auparavant, mais est-ce que ce serait la voie à suivre?

Était-ce utile?

La solution

Vous n'avez pas besoin d'un NSTimer pour cela, vous pouvez simplement utiliser performSelector: withObject: afterDelay: séquencer une méthode à la suivante jusqu'à ce que vous recommenciez. Démarrez le processus lorsque le bouton est maintenu enfoncé et appelez cancelPreviousPerformRequestsWithTarget: selector: object: lorsque le bouton est relâché. Quelque chose comme:

- (void) step1
{
    // turn blue
    [self performSelector:@selector(step2) withObject:nil afterDelay:1.0];
}

- (void) step2
{
    // change image
    [self performSelector:@selector(step3) withObject:nil afterDelay:2.0];
}

- (void) step3
{
    // turn red
    [self performSelector:@selector(step1) withObject:nil afterDelay:3.0];
}

- (void) stopSteps
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step1) object:nil];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step2) object:nil];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step3) object:nil];
}

Vous pourriez vous souvenir du " performSelector " en cours d'exécution sélecteur et seulement annuler celui-là, mais ça ne vaut pas la peine de s'en souvenir.

Vous pouvez également utiliser un NSTimer et une machine à états, mais pour ce que vous décrivez, la procédure ci-dessus est probablement plus simple. Cela dépend de la cohérence de votre séquence et de la possibilité de spécifier votre séquence comme un ensemble d'étapes telles que ci-dessus, ou un ensemble de données (dans ce cas, utilisez une machine à états, avec un NSTimer ou performSelector: withObject: afterDelay:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top