2010-07-17 3 views
1

Je veux une vue d'image d'une certaine taille disons 25 par 25, pour se déplacer dans un mouvement linéaire de gauche à droite, puis à gauche en continu. Disons que l'image commence à se déplacer de gauche, puis au moment où elle atteint la droite, elle devrait commencer à revenir vers la gauche, alors cela devrait se répéter.Déplacer la vue d'image à l'écran

J'ai ce code, qui permet à la vue de descendre, mais je suis incapable de le déplacer d'avant en arrière. C'est pour UIView.

[UIView beginAnimations:@"MyAnimation" context:nil]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:45.0]; // 5 seconds 
frame = movingView.frame; 
//int j = frame.origin.y; 
int i; 
for (i= 0; i<=100; i++) { 
    frame.origin.y += i;//100.0; // Move view down 100 pixels 
    movingView.frame = frame; 
} 

Comment est-ce que je devrais faire ceci?

Cordialement

Répondre

1

Vous ne devez pas vous animer les choses lors de l'utilisation des animations UIView.

frame = movingView.frame; 
frame.origin.x = 0; 
movingView.frame = frame; // starting point 

[UIView beginAnimations:@"MyAnimation" context:nil]; 
[UIView setAnimationDuration:5]; 

frame.origin.x = 320-25; 
movingView.frame = frame; // endpoint 

[UIView commitAnimations]; 

pour un déplacement de gauche à droite. Pour attendre la fin, utilisez setAnimationDidStopSelector pour appeler une méthode qui fait l'animation opposée.

Jetez un coup d'œil à flipping uiview continuously pour le contenu délégué de l'animation.

+0

Merci mvds je sais que setAnimationDidStopSelector s'appelle comme ceci. \t [UIView setAnimationDelegate: self]; Mais où faire cela, je ne reçois pas l'animation ci-contre ce qui a trait – iscavengers

+0

s'il vous plaît mettre à jour votre question pour montrer votre code actuel, ou nous allons eachother divertissant toute la journée ... – mvds

+0

a ajouté un lien vers le même type de question que j'ai répondu hier. – mvds

3

Il semble que vous pourriez rendre cela plus compliqué que nécessaire. Animer la vue centre plutôt que son cadre.

[UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationRepeatAutoreverses:YES]; 
    [UIView setAnimationRepeatCount:HUGE_VAL]; 
    [UIView setAnimationDuration:5.0]; 
    // Animate to right side of the containing view 
    [movingView setCenter:CGPointMake([[self view] bounds].size.width - 
        [movingView bounds].size.width/2.0, 
        [movingView center].y)]; 
    [UIView commitAnimations]; 

Ceci anime le centre de la vue sur le côté droit de la vue contenant, puis revient automatiquement à la position de départ. Notez que je soustrais la moitié de la largeur movingView puisque nous voulons animer sur le côté droit, mais nous déplaçons centre de la vue pas son origine. Si vous réglez la répétition de l'auto-répétition sur YES, l'animation revient à l'endroit où elle a démarré, puis le nombre de répétitions se répète indéfiniment.

De même, il n'y a aucune raison de déplacer la vue d'un pixel à la fois. Définissez simplement la position de fin que vous voulez donner à la vue et spécifiez une durée appropriée pour l'atteindre. Core Animation élimine le besoin de créer vos propres boucles d'animation, minuteurs ou threads.

Questions connexes