我有两个CALayer,每个都显示一张图片。视图层次结构中的第一个(左)层位于第二个层之上。问题是,在围绕y轴应用旋转之后,右边的图层突然被绘制在应该位于顶部的图层上方。
我尝试使用不同的zPosition值。没有。我的另一个猜测是,正确图层的动画可能会在左图层的动画之后完成,因此它会在顶部绘制。为了测试这个,我首先将转换应用于右层,但结果仍然相同。哦,我也没有运气就尝试了CA交易。
这是截图:
在保持订单的同时为多个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];
答案 0 :(得分:0)
您是否尝试过在z轴上进行翻译?要么使您的顶层具有更大的数字,要么您的更低层具有更低或负数。尝试一些非常大的东西,看看它是否解决了这个问题。然后缩小边距,直到尽可能接近图层,而不会导致您看到的偏移。像这样:
CATransform3D trans = CATransform3DIdentity;
trans.m34 = 1 / -900;
trans = CATransform3DTranslate(trans, 0.0f, 0.0f, -500.0f);
[lowerLayer setTransform:trans];
不利的一面是,如果你计划堆叠一堆图层,你可能不得不使用这个最小边距并将其乘以你计划显示的图层数量,从而导致堆栈淡入距离。当然,如果那是你想要的效果,这将是一件好事。