tourner un UIView autour de son centre, mais à plusieurs reprises

voix
16

Je suis en train de tourner un peu UIViewautour de son centre, de sorte que le code simple passe quelque chose comme (en pseudocode):

[UIView beginAnimations:@crazyRotate context:nil];
[UIView setAnimationDuration:1.0];
someview.transform = CGAffineTransformMakeRotation(angle);
[UIView commitAnimations]

maintenant , si je mets angle dire M_PI / 2 la chose tourne bien. si je mets à 2 * M_PI, bien qu'il ne « rien ». Je peux comprendre que la matrice se traduit par quelque chose qui ne fait rien (rotation à 360 signifie « séjour » dans un sens), mais, je veux tourner 5 fois (pensez à un journal faites pivoter l' échelle venant à vous effet - je ne suis pas grand à décrire, espérons que quelqu'un comprend). Donc, j'ai essayé d' ajouter angle à 180 ° réglage (M_PI) et ajouter un imbriquée animatationBlock. mais je suppose que depuis que je suis mise la même propriété ( someview.transition) encore , il ignore en quelque sorte). J'ai essayé la mise en valeur de répétition de l'animation à 2 avec un angle M_PI mais il semble tourner simplement 180, en remontant à la position droite, puis lancer la rotation à nouveau.

Donc, je suis un peu d'idées, toute aide appréciée! -T

Créé 06/02/2009 à 00:49
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
36

Vous pouvez utiliser l'animation suivante sur la propriété de la couche de votre UIView. Je l'ai testé.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Créé 06/02/2009 à 01:26
source utilisateur

voix
6

Comme Brad Larson indiqué, vous pouvez le faire avec CAKeyframeAnimation. Par exemple,

CAKeyframeAnimation *rotationAnimation;
rotationAnimation = 
   [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

rotationAnimation.values = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat:0.0 * M_PI], 
                            [NSNumber numberWithFloat:0.75 * M_PI], 
                            [NSNumber numberWithFloat:1.5 * M_PI], 
                            [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.timingFunction = 
   [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.duration = 10.0;

CALayer *layer = [viewToSpin layer];
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

Vous pouvez contrôler la durée de l'animation totale avec la rotationAnimation.durationpropriété, et l'accélération et la décélération (et le calcul d'étapes entre les deux) avec la rotationAnimation.timingFunctionpropriété.

Créé 29/02/2012 à 00:37
source utilisateur

voix
1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 8.0f;
animation.repeatCount = INFINITY;
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];
Créé 22/06/2015 à 15:35
source utilisateur

voix
1

Obtenir un effet de rotation continue est un peu délicat, mais je décris un moyen de le faire ici . Oui, Core Animation semble optimiser les transformations à la position de fin le plus proche dans le cercle unité. La méthode que je décrit là des chaînes quelques animations demi-rotation ensemble pour effectuer des rotations complètes, même si vous remarquez une légère bégayer dans le transfert d'une animation à l'autre.

Peut-être un CAKeyframeAnimation construit avec ces valeurs demi-rotation serait la bonne façon de procéder. Ensuite, vous pouvez également contrôler l'accélération et la décélération.

Créé 06/02/2009 à 14:50
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more