45到+45角)?

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

    [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”。 没有帮助。 旋转总是动画为正面而不是负面角度。

就像测试一样,将“最终+45”改为负角度也会使动画停止在所需的角度。 所以角度本身就没问题。

问题似乎是从零开始或向低谷方向进行“逆时针”旋转。 小于零的值总是转换为正角。

如果以上是实现反弹效果的正确技术,则独立,如何构建一个(嵌套)层动画,以便通过CATransform3DMakeRotation从正(45)旋转到负角(-45)?


您正在围绕x轴旋转。 如果没有对变革的看法,你会如何看待正面和负面角度的区别? 没有视角,正面和负面的旋转看起来是一样的(降低高度)。 您可以通过设置.m34通过更改变换矩阵的第三行和第四列中的值来将透视应用于变换。 搜索“Core Animation透视图”,你会发现一个很好的解释。

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

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

链接地址: http://www.djcxy.com/p/74227.html

上一篇: 45 to +45 angle)?

下一篇: How do I animate CATransform3Ds with a CAKeyframeAnimation?