gpt4 book ai didi

cocoa - 变换后CALayer与顶层重叠

转载 作者:行者123 更新时间:2023-12-03 16:48:09 25 4
gpt4 key购买 nike

我有两个 CALayer,每个显示一个图像。 View 层次结构中的第一层(左)位于第二层之上。问题是,在我绕 y 轴旋转后,右侧图层突然绘制在本应位于顶部的图层上方。

我尝试使用不同的 zPosition 值。没有什么。我的另一个猜测是,右侧图层的动画可能在左侧图层的动画完成之后完成,因此它绘制在顶部。为了测试这一点,我首先对右侧图层应用了转换,但结果仍然相同。哦,我也尝试过CA交易,但没有成功。

这里是屏幕截图:

the problem

在保持多个 CALayers 的顺序的同时对它们进行动画处理的正确方法是什么?

谢谢,马克。编辑:

这是转换的代码。我尝试禁用动画,但得到了相同的结果。

[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];

最佳答案

您尝试过在 z 轴上平移吗?要么让你的顶层有一个更大的数字,要么你的下层有一个更低的数字或负数。首先尝试一些非常大的东西,看看它是否可以解决问题。然后缩小边距,直到图层尽可能接近,而不会导致您看到的变化。像这样的事情:

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

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

[lowerLayer setTransform:trans];

缺点是,如果您打算堆叠一堆图层,您可能必须使用此最小边距并将其乘以您计划显示的图层数,从而导致堆栈淡入距离。当然,如果这就是您想要的效果,这将是一件好事。

关于cocoa - 变换后CALayer与顶层重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com