iOS: eine Komplette 360-Grad-Rotation Using-Block, Nicht CABasicAnimation

Sollte es etwas sein, was wirklich einfach, aber ich habe nicht erfolgreich gewesen bekommen Sie diese, um die Arbeit mit Blöcken. Es gibt Fragen und Antworten zu diesem, aber alle die ich gefunden sind gelöst durch die Verwendung von CABasicAnimation und nicht durch UIView Block-Basierte Animation, die ist, was ich bin nach.

Folgender code funktioniert nicht (Block-Basiert), keine animation:

CGAffineTransform spin = CGAffineTransformRotate(spiningView.transform, DEGREES_RADIANS(360));

CATransform3D identity = CATransform3DIdentity;
CATransform3D spin2 =  CATransform3DRotate(identity, DEGREES_RADIANS(360), 0.0f, 0.0f, 1.0f);


[UIView animateWithDuration:3.0f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveLinear
                 animations:^
                 {
                     spiningView.transform = spin;
                     //spiningView.layer.transform = spin2;
                     //Have also tried the above, doesn't work either.
                 }
                 completion:^(BOOL finished)
                 {
                     spiningView.transform = spin;
                     //spiningView.layer.transform = spin2;
                 }];

Von meinem Verständnis, wenn wir jedes mal verwenden Sie Block-Basiert, keine animation auftreten würde, wenn UIViewAnimation Block "sieht", dass der begin-Wert ist der gleiche wie der Letzte Wert. Fair genug, indem ich Sie zu bewegen, um 360 Grad würde bedeuten, dass das Objekt bleibt wo es ist. Aber es ist ein Weg, um Block-Basierte Animation zu machen, diese animieren, da die folgenden CABasicAnimation würde einwandfrei funktionieren:

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0f];
rotationAnimation.duration = 3.0f;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1;
[spiningView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];  

Darüber Hinaus die folgenden Block-Basiert arbeitet, aber es ist ein Zwischenstopp mit Animationen (erste dreht es um 180 Grad, dann davon, um eine weitere 180-Grad-komplette Drehung), das ist nicht das, was ich nach:

[UIView animateWithDuration:3.0f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveLinear
                 animations:^
                 {
                     spiningView.transform = CGAffineTransformRotate(spiningView.transform, DEGREES_RADIANS(180));;
                 }
                 completion:^(BOOL finished)
                 {                         
                     [UIView animateWithDuration:3.0f
                                           delay:0.0f
                                         options:UIViewAnimationOptionCurveLinear
                                      animations:^
                                      {
                                         spiningView.transform = CGAffineTransformRotate(spiningView.transform, DEGREES_RADIANS(360));
                                      }
                                      completion:^(BOOL finished)
                                      {

                                      }];

                 }];

Ich weiß, ich könnte viel Zeit sparen, und einfach aufgeben, mich mit CABasicAnimation und mit ihm getan werden, aber ich möchte wissen, warum das eine funktioniert und der andere nicht in diesem Fall (einer 360-Grad-Drehung). Ich hoffe, dass du mir eine ausführliche Erklärung für diese zwischen den 2 in diesem Fall und einigen code (Block-Basiert), können führen Sie eine komplette 360-Grad-Drehung.

Vielen Dank im Voraus.

  • Sollte nicht die zweite Transformation (in die block-basierte Lösung) verwenden, 180 Grad, da es sich um eine transformation über den aktuellen transform-Eigenschaft an diesem Punkt (das ist schon 180 Grad)? Auch haben Sie versucht, nur mit CGAffineTransformMakeRotation(M_PI*2) im Einzelzimmer animations block?
  • In der zweiten animation block in den zweiten block-basierte Lösung ist in der Tat 360 Grad, wenn ich 180 Grad, es würde sich nur drehen um 180 Grad (von der ersten animation-block) und Stoppt dort. Auch scheint es mir seltsam, dass ich eingestellt habe 360 Grad in der zweiten nested-block-statt 180.
InformationsquelleAutor Unheilig | 2013-10-16
Schreibe einen Kommentar