围绕所有轴的 CATransform3D

Posted

技术标签:

【中文标题】围绕所有轴的 CATransform3D【英文标题】:CATransform3D around all axis 【发布时间】:2013-03-23 20:43:24 【问题描述】:

我正在尝试创建一种“翻转”动画,将 UIView 围绕每个轴旋转 180 度,但是,我无法获得所需的效果。到目前为止,这是我所得到的:

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^     
        CATransform3D tX= CATransform3DIdentity;
        tX.m34 = 1.0 / -500;
        CATransform3D tY= CATransform3DIdentity;
        tY.m34 = 1.0 / -500;
        CATransform3D tZ= CATransform3DIdentity;
        tZ.m34 = 1.0 / -500;

        tX = CATransform3DRotate(tX, M_PI, 1.0f, 0.0f, 0.0f);
        tY = CATransform3DRotate(tY, M_PI, 0.0f, 1.0f, 0.0f);
        tZ = CATransform3DRotate(tZ, M_PI, 0.0f, 0.0f, 1.0f);

        self.flipView.layer.transform = CATransform3DConcat(tX, CATransform3DConcat(tY, tZ));            
    

然而,这似乎并没有执行任何动画,就好像它们正在相互抵消一样。看起来这应该是一个非常简单的任务,但我似乎无法弄清楚如何组合这 3 个动画条件中的每一个。非常感谢任何帮助!谢谢

【问题讨论】:

【参考方案1】:

围绕三个轴中的每一个旋转半圈(180° 或 π 弧度)总共不会导致任何变化(三个旋转变换的串联导致恒等变换)。

试着只绕一个轴旋转看看会发生什么。

【讨论】:

感谢您的帮助。我在想即使终点与起点相同,它也会执行动画 - 但显然不是 我相当肯定UIView 动画甚至CABasicAnimations 会查看开始和结束状态,并仅根据这些状态确定要做什么。不过,很可能还有另一种动画机制,可以像您想象的那样工作。

以上是关于围绕所有轴的 CATransform3D的主要内容,如果未能解决你的问题,请参考以下文章

围绕 Y 轴的任意纹理位移

three.js 围绕 Y 轴的相机旋转似乎关闭

3D转换

从旋转矩阵获取绕 y 轴的旋转

如何在 WPF/XAML 中制作关于 Y 轴的列表的连续 360 度动画

在四元数旋转上应用镜像效果的有效方法?