2009-08-31 4 views
1

J'essaye de déplacer un UIView, qui est petit. Ma boucle for déplace l'UIView de 100 points.Déplacer UIView avec une boucle for

Cela fonctionne sauf qu'il ne bouge pas tant que la boucle n'est pas terminée.

J'ai essayé d'installer

[self.view setNeedsDisplay] et [myView setNeedsDisplay], je l'ai également mis la fonction à l'intérieur NSTimer et NSThread, comme vu ci-dessous

[NSThread detachNewThreadSelector:@selector(doStuff) toTarget:self withObject:nil]; 

et

[NSTimer scheduledTimerWithTimeInterval:1/15 
    target:self selector:@selector(doStuff) 
     userInfo:nil 
    repeats:NO] ; 

Mais ça ne "anime" pas. Après chaque mouvement de la vue, je fais un sommeil (1); mais toujours rien.

J'espère que quelqu'un peut m'aider.

Répondre

1

Votre pour les blocs de boucle le redécoupage réel de votre point de vue, ce qui se passe dans le runloop, quand est appelée drawRect de votre point de vue. Vous avez trois options (et beaucoup plus).

Deux ont été suggérés par @Darren. Un autre est d'appeler performSelector: afterDelay passant dans la routine qui déplace la vue de 100 pixels (les entrailles de votre boucle for). À la fin de cette routine, appelez performSelector: afterDelay: pour remettre en file d'attente l'appel suivant. Je préfère cela à l'aide d'une minuterie.

+0

Merci. Après avoir enlevé la boucle for et juste fait un timer et un booléen (devrait bouger), tout fonctionne comme prévu. Ne peut pas pour la vie de moi comprendre par la suite pourquoi je tentais la boucle for. Merci à tous –

4

Vous ne pouvez pas utiliser une boucle for. Vous devez configurer une minuterie répétitive; chaque fois que la minuterie se déclenche, vous déplacez la vue vers le bas x pixels, et vous annulez le minuteur une fois que la vue est dans sa position finale.

Mais vous devriez envisager d'utiliser Core Animation:

[UIView beginAnimations:@"MyAnimation" context:nil]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:5.0]; // 5 seconds 

CGRect frame = myView.frame; 
frame.origin.y += 100.0; // Move view down 100 pixels 
myView.frame = frame; 

[UIView commitAnimations]; 
Questions connexes