iOS: un tour Complet de 360 Degrés de Rotation à l'Aide de Bloc, Pas CABasicAnimation

Il devrait être quelque chose de vraiment simple, mais je n'ai pas réussi à obtenir ce travail à l'aide de blocs. Il y a des questions et des réponses à cela, mais à tous j'ai trouvé sont résolus par l'utilisation de CABasicAnimation et non par UIView Bloc de Base de l'Animation, qui est ce que je suis après.

Le code suivant ne fonctionne pas (en Fonction de Bloc), pas d'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;
                 }];

À partir de ma compréhension, quand chaque fois que nous utilisons en Fonction de Bloc, pas d'animation, lorsque UIViewAnimation Bloc "voit" que le commencent de la valeur est la même que la valeur finale. Juste assez, réglage de se déplacer à 360 degrés signifie que l'objet reste où il est. Mais il doit être un moyen d'utiliser le Bloc de Base de l'Animation pour faire de cette animation, car celui-ci CABasicAnimation fonctionnerait parfaitement:

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

En Outre, le Bloc suivant les ouvrages, mais il y a un arrêt entre les deux animations (d'abord il pivote à 180 degrés, puis de là à en faire un autre de 180 degrés pour compléter la rotation), ce qui n'est pas ce que je suis après:

[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)
                                      {

                                      }];

                 }];

Je sais que je pourrais économiser beaucoup de temps et il suffit de se rendre moi-même à l'aide de CABasicAnimation et être fait avec elle, mais je voudrais savoir pourquoi on travaille et que l'autre n'est pas dans ce cas (faire une rotation de 360 degrés). J'espère que vous pouvez me donner une explication détaillée concernant ce entre les 2 dans ce cas, et un peu de code (Bloc) qui peut effectuer un tour complet de 360 degrés de rotation.

Merci à l'avance.

Ne pas le deuxième transformation (dans le bloc) utilisation de 180 degrés, car c'est une transformation au cours de la transformation en cours de la propriété en ce point (ce qui est déjà 180 degrés)? Aussi avez-vous essayé tout à l'aide de CGAffineTransformMakeRotation(M_PI*2) dans un seul animations bloc?
Dans le deuxième bloc d'animation dans le deuxième bloc de base de la solution est en fait 360 degrés, si j'ai utilisé de 180 degrés, il suffit de faire pivoter à 180 degrés (par le premier bloc d'animation) et s'arrête là. Il semble aussi étrange pour moi que je dois mettre à 360 degrés à l'intérieur de la deuxième instruction de bloc au lieu de 180.

OriginalL'auteur Unheilig | 2013-10-16