CALayer在转换后重叠顶层

时间:2011-02-15 16:24:18

标签: cocoa core-animation calayer transformation

我有两个CALayer,每个都显示一张图片。视图层次结构中的第一个(左)层位于第二个层之上。问题是,在围绕y轴应用旋转之后,右边的图层突然被绘制在应该位于顶部的图层上方。

我尝试使用不同的zPosition值。没有。我的另一个猜测是,正确图层的动画可能会在左图层的动画之后完成,因此它会在顶部绘制。为了测试这个,我首先将转换应用于右层,但结果仍然相同。哦,我也没有运气就尝试了CA交易。

这是截图:

the problem

在保持订单的同时为多个CALayer制作动画的正确方法是什么?

谢谢,马克。 编辑:

以下是转换的代码。我尝试禁用动画,但结果相同。

[CATransaction begin];

[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 400;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, DegreesToRadians(70), 0, 1, 0);

 for(CALayer *layer in [self.layer sublayers]) {
    // transform the two layers
    layer.transform = rotationAndPerspectiveTransform;

}
[CATransaction commit];

1 个答案:

答案 0 :(得分:0)

您是否尝试过在z轴上进行翻译?要么使您的顶层具有更大的数字,要么您的更低层具有更低或负数。尝试一些非常大的东西,看看它是否解决了这个问题。然后缩小边距,直到尽可能接近图层,而不会导致您看到的偏移。像这样:

CATransform3D trans = CATransform3DIdentity;
trans.m34 = 1 / -900;

trans = CATransform3DTranslate(trans, 0.0f, 0.0f, -500.0f);

[lowerLayer setTransform:trans];

不利的一面是,如果你计划堆叠一堆图层,你可能不得不使用这个最小边距并将其乘以你计划显示的图层数量,从而导致堆栈淡入距离。当然,如果那是你想要的效果,这将是一件好事。