drehen, um eine UIView um seinen Mittelpunkt, sondern mehrmals

stimmen
16

Ich versuche , einige drehen UIViewum seinen Mittelpunkt, so dass der einfache Code so etwas wie (in Pseudo - Code) geht:

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

jetzt , wenn ich Winkel sagen M_PI / 2 das Ding schön dreht. wenn ich es 2 * M_PI gesetzt, und es tut „nichts“. Ich kann verstehen , dass die Matrix zu etwas übersetzt , die nichts (rotierende 360 bedeutet „Aufenthalt“ in gewissem Sinne) der Fall ist, noch, ich will es 5 mal drehen (man denke an eine Zeitung rotieren mit Ihnen Effekt Skala kommen - ich bin nicht groß zu beschreiben, hoffe jemand versteht). Also habe ich versucht , eine verschachtelte Einstellwinkel auf 180 ° (M_PI) und fügen Sie das Hinzufügen animatationBlock. aber ich denke , dass da ich die gleiche Eigenschaft Einstellung ( someview.transition) wieder ignoriert es irgendwie). Ich habe versucht , Wiederholungszahl der Animation 2 mit Winkel M_PI Einstellung , aber es scheint einfach 180 zu drehen , um gerade Position zurück und dann wieder drehen zu initiieren.

Also, ich bin ein wenig aus Ideen, jede Hilfe dankbar! --t

Veröffentlicht am 06/02/2009 um 00:49
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
36

Sie können die folgende Animation verwenden, um auf Ihre UIView der Schichteigenschaft. Ich habe es getestet.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Beantwortet am 06/02/2009 um 01:26
quelle vom benutzer

stimmen
6

Als Brad Larson angegeben, können Sie dies mit einem tun CAKeyframeAnimation. Zum Beispiel,

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"];

Sie können die Dauer der Gesamt Animation mit der Steuer rotationAnimation.durationEigenschaft, und die Beschleunigung und Verzögerung (und die Berechnung der Zwischenschritte) mit der rotationAnimation.timingFunctionEigenschaft.

Beantwortet am 29/02/2012 um 00:37
quelle vom benutzer

stimmen
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"];
Beantwortet am 22/06/2015 um 15:35
quelle vom benutzer

stimmen
1

Einen kontinuierlichen Spinn Effekt zu erhalten ist ein wenig kompliziert, aber ich beschreiben ein Mittel , es zu tun hier . Ja, Core Animation scheint Transformationen auf die nächste Endposition innerhalb des Einheitskreises zu optimieren. Das Verfahren beschreibe ich es Ketten ein paar Halb Rotation Animationen zusammen volle Umdrehungen zu machen, obwohl Sie ein leichtes Stottern in der Handoff von einer Animation zum nächsten bemerken tun.

Vielleicht ein CAKeyframeAnimation mit diesen Halbrotationswerten konstruiert wäre der richtige Weg zu gehen. Dann könnten Sie auch Beschleunigung und Verzögerung steuern.

Beantwortet am 06/02/2009 um 14:50
quelle vom benutzer

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