ios - 如何围绕 Y 轴翻转 CALayer?

标签 ios core-animation perspective rotational-matrices

我在 CALayer 的子类中使用此代码,其中实例是根 CALayer 的子层。

-(void)setSelected:(bool)s {
    selected=s;
    if (s)
    {
        CATransform3D  rot = CATransform3DMakeRotation(M_PI, 0, 1, 0);
        rot.m34=-1.0 / 200;
        [self setTransform:rot];

    }
    else
    {
            CATransform3D  rot = CATransform3DMakeRotation(0, 0, 1, 0);
        rot.m34=-1.0 / 200;
        [self setTransform:rot];
    }
}

当所选属性设置为 TRUE 时,会发生以下情况:旋转完成直到角度等于 M_PI/2,然后图层消失,因为它是正交的。动画的结束是错误的:在动画的第一部分(例如左侧)出现增长的边缘,在左侧而不是右侧结束动画。但是内容被翻转了。

我认为这与两个旋转矩阵之间的插值有关,但我不明白到底发生了什么。

细节:动画看起来是这样的:

  1. 将绕 Y 轴的旋转增加 +Pi/2
  2. 内容翻转
  3. 将围绕 Y 轴的旋转增加 -Pi/2,就好像它从 (yz) 平面反弹

翻转的内容是我想要实现的。

这是我得到的动画帧。如您所见,梯形的小边总是在左边;它应该在动画结束时的右侧(右上角的框架)。 A layer rotating around the Y-axis

最佳答案

如果有人只想水平翻转图像或 View 的方向

yourView.layer.transform = CATransform3DMakeScale(-1, 1, 1);

yourView.layer.affineTransform =  CGAffineTransformMakeScale(-1, 1);

关于ios - 如何围绕 Y 轴翻转 CALayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579985/

相关文章:

ios - Swift 语法问题 : Nested class type cannot be used when declaring variables of that type

ios - 无法在 Swift 中导入 Obj-C 框架

ipad - Core Animation 是否为 iBook 风格的 curl 页面过渡提供公共(public) API?

eclipse - 如何默认显示我们自己的观点?

ios - 设置页面仅显示一次

ios - 如何用新对象替换给定索引处的 NSMutableArray 中的对象

iphone - 在按钮上滚动溢出文本的简单方法?

iphone - 如何正确获取presentationLayer的当前变换?

javascript - Canvas 中类似 Mode7 的透视变换?

3d - 透视投影-如何投影 'camera'之后的点?