CATransform3DMakeRotationanimation槽零(从-45到+45angular)?

我正在尝试做一个有反弹效果的简单水平翻转animation。

[UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationCurveEaseIn animations:^{ front.layer.transform=CATransform3DMakeRotation(DEGREES_TO_RADIANS(90), -1.0,0.0,0.0); // flip halfway } completion:^(BOOL finished) { // swap view front.alpha=0; back.alpha=1; [UIView animateWithDuration:0.5 animations:^{ // flip remaining + bounce back.layer.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(45), 1.0,0.0,0.0); // final + 45 } completion:^(BOOL finished) { [UIView animateWithDuration:0.25 animations:^{ back.layer.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(-22.5), 1.0,0.0,0.0); // bounce back } completion:^(BOOL finished) { [UIView animateWithDuration:0.125 animations:^{ back.layer.transform = CATransform3DMakeRotation(0, 1.0,0.0,0.0); // final }]; }]; }]; }]; 

除了“反弹”,效果很好。 -22.5旋转转换为0,并返回到22.5,而不是继续到-22.5。

我已经尝试了各种值,并且还包括一个中间嵌套块,在反转之前将反弹转换为“0”。 没有帮助。 旋转总是dynamic的积极,而不是消极的angular度。

就像testing一样,将“最终+45”改变为负angular度也会停止所需angular度的animation。 所以angular度本身是可以的。

问题似乎是从零开始,或者是从零开始的“逆时针”旋转。 小于零的值总是被转换为正的angular度。

如果以上是用于实现反弹效果的正确技术,则是独立的,那么将如何构build通过CATransform3DMakeRotation从正(45)旋转到负angular(-45)的(嵌套)层animation?

您正在围绕x轴旋转。 如果没有对变革的看法 ,你会如何看待正面和负面的angular度? 没有视angular,正面和负面的旋转看起来是一样的(降低高度)。 您可以通过设置.m34变换matrix的第三行和第四列中的值, 将透视应用于变换 。 search“核心animation透视”,你会发现一个很好的解释。

我在上面运行你的代码(在一个简单的视图中,用橙色填充)。 为了更容易地看到旋转以及正angular度和负angular度之间的差异,我改变了它,使其围绕Z轴旋转。

这是我在animation中拍摄的四张截图。 正如你所看到的,消极的angular度是有效的,除非我误解了你正在做的事情。

0度45度-25度0度