夸大了对CATransform3DPerspective的看法

时间:2014-06-21 15:12:41

标签: ios core-animation catransform3d

我有一个动画,我将其添加到视图中。在动画中,我有一个崩溃的单元格,就好像它被折叠一样。我将视图拆分为两个单独的图层,并在每个图层上应用旋转。这是有效的,然而,效果比我想要的更微妙。我正在寻找一种方法来增加中心线末端(每层的顶部和底部边缘)之间的间隙,在动画期间延伸。基本上,这两半不够高,令人信服地看起来像是向后折叠。这是我目前拥有的动画中期,橙色线大约是我希望动画中线条落下的地方:

enter image description here

以下是处理轮换的代码:

- (CABasicAnimation *)foldLayerToValue:(CGFloat)toValue expanding:(BOOL)expanding
{
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    CATransform3D rotate = CATransform3DIdentity;
    rotate.m34 = 1.0 / -2000.f;

    rotate = CATransform3DRotate(rotateAndScale, [self radiansFromDegrees:toValue], 1.f, 0.f, 0.f);

    animation.toValue = [NSValue valueWithCATransform3D:rotateAndScale];

    return animation;
}

这会添加到CATransaction中,该动作也会在动画期间将下部向下移动正确的数量。我尝试在动画中添加比例因子,但这会对整个图层产生影响,同时缩放顶部和底部边缘。我尝试在旋转时增加图层的高度,但这也提供了令人讨厌的结果。

有什么想法吗?有什么办法可以逐个角落地手动设置位置吗?

我认为部分问题是我的锚点位于中心线上。在旋转过程中,顶部和底部边缘越来越接近POV,而不是中心线越来越远。您可以看到角落略微偏离屏幕,这限制了您可以看到效果的数量。我以前有一个版本,在图层的顶部和底部有锚点,但我无法让两个图层保持不变,而是触摸"随着动画的发生。我曾尝试在动画期间向Z坐标添加一个平移,但它似乎对任何东西都没有影响。

1 个答案:

答案 0 :(得分:3)

您正在使用的值(-1.0/2000.0)对应于远离相机/眼睛的物体,通常视角较低。如果你想要一些具有更多视角的东西,那么你应该把它改成与相机相距较小距离的东西。通常,大约500-800的范围是“正常”距离,因此您可能正在寻找200-400范围内的东西。

即:将.m34值更改为-1.0/200.0,并且会有更多观点。