2011-06-19 4 views
1

Je souhaite déplacer mon UIImageView de gauche à droite et vice versa. Je réalise la moitié en utilisant le code suivant:UIImageView animation de gauche à droite

[UIView setAnimationDuration:1.0]; 
[UIView setAnimationRepeatCount:10]; 
[UIView setAnimationRepeatAutoreverses:YES]; 

CGPoint pos = mover.center; 
pos.x = 100.0f; 
mover.center = pos; 

[UIView commitAnimations]; 

mover est un UIImageView. Le problème auquel je suis confronté est que je suis incapable de le déplacer complètement de gauche à droite. Le code ci-dessus ne fait que le déplacer de droite à centre. Je veux aller plus loin à gauche du centre. Quelqu'un peut-il me guider s'il vous plaît?

Répondre

6

Je ne pense pas UIKit animations vous fournir des animations d'images clés directes pour obtenir l'effet d'oscillation. Nous pouvons essayer d'y parvenir en utilisant des délégués en déclenchant une animation après l'autre mais ce n'est pas aussi efficace que CAKeyframeAnimation. Pour l'utiliser, vous devez inclure le framework QuartzCore dans votre projet et #import <QuartzCore/QuartzCore.h>. Vous pouvez obtenir votre effet d'oscillation en faisant quelque chose comme ça,

self.mover.center = CGPointMake(160, 240); 

CAKeyframeAnimation *animation; 

animation = [CAKeyframeAnimation animationWithKeyPath:@"position.x"]; 
animation.duration = 3.0f; 
animation.repeatCount = 10; 
animation.values = [NSArray arrayWithObjects: 
        [NSNumber numberWithFloat:160.0f], 
        [NSNumber numberWithFloat:320.0f], 
        [NSNumber numberWithFloat:160.0f], 
        [NSNumber numberWithFloat:0.0f], 
        [NSNumber numberWithFloat:160.0f], nil]; 
animation.keyTimes = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0], 
         [NSNumber numberWithFloat:0.25], 
         [NSNumber numberWithFloat:.5], 
         [NSNumber numberWithFloat:.75], 
         [NSNumber numberWithFloat:1.0], nil];  

animation.removedOnCompletion = NO; 

[self.mover.layer addAnimation:animation forKey:nil]; 

Ce bout de code oscille en vue de gauche à droite assez proche de votre description, bien que pour obtenir l'effet exact que vous voulez que vous pourriez avoir à changer un peu .

+0

qui était juste un exemple, je ne l'ai pas mis 100 pour x pos en fait, et bien cette réponse n'est pas utile parce que je voulais aller c'est gauche et droite. Vous venez d'expliquer un mouvement de côté que j'ai déjà fait :( – Wasim

+0

@Wasim Votre question ne mentionnait pas qu'il n'y avait pas d'animation du tout, j'ai donc mal compris votre besoin, j'ai mis à jour ma réponse –

+0

@Deepak Merci pour la réponse :) mais vous encore mal compris ma question :) J'ai dit que j'ai à moitié accompli l'animation ce qui signifie que je suis capable d'animer mon UIViewImage du centre vers la droite ou vers la gauche. Mais mon motif principal est de lancer l'animation depuis le centre de l'écran et de la déplacer d'abord vers l'extrême gauche puis vers l'extrême droite. J'espère que ma question est plus claire pour vous maintenant :) Désolé de vous déranger encore une fois :) – Wasim

0

Au lieu de régler le centre, vous devriez vous pencher sur le réglage de la transformation. Avec le centre, vous définissez le centre, ce qui signifie que vous devez calculer le centre correctement par rapport à la taille de l'image. Pour le déplacer, définissez la transformation sur -320. Pour le déplacer, réglez-le sur la transformation d'identité.

4

En supposant que vous pouvez cibler iOS4, cela peut être réalisé par

typedef void (^completionBlock)(BOOL); 
    completionBlock moveToExtremeRight = ^(BOOL finished){ 
     // animate, with repetition, from extreme left to extreme right 
     [UIView animateWithDuration:2.0 // twice as long! 
          delay:0.0 
         options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionRepeat|UIViewAnimationAutoReverse 
        animations:^{ 
          mover.transform = CGAffineTransformMakeTranslation(100, 0); 
        } 
        completion:nil 
     ]; 
    }; 
    mover.transform = CGAffineTransformIdentity; 
    // animate once, to the extreme left 
    [UIView animateWithDuration:1.0 
          delay:0.0 
         options:UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
          // or whatever is appropriate 'extreme left' 
          mover.transform = CGAffineTransformMakeTranslation(-100, 0); 
        } 
        // on completion, start a repeating animation 
        completion:moveToExtremeRight 
    ]; 
Questions connexes