这是带有四个嵌套UIView
的iPad模拟器,绘制自定义背景和内部UILabel
。我正在旋转顶部UIView
的CALayer,获取它的图层并使用rotateY transform
设置CATransform3D
,在单独的线程上进行动画处理(但对transform
的更改是正在主线上发送,自然地):
注意 - 此动画无法正确循环,因此它似乎会反弹。
图层做作为一个整体动画,但奇怪的是,第一个孩子及其后代似乎浮动在UIView
上方并应用了变换!
UIView
本身是另一个UIView
中的孩子,其背景为红色。其他任何地方都没有其他变换。
每个UIView的位置最初都是使用setFrame
设置的。
导致这种奇怪行为的原因是什么?如何确保孩子UIView
与父母一起变换,使整个表面呈现平坦的外观?
答案 0 :(得分:1)
好。也许不出所料我做了一些愚蠢的事情,但由于我以前没有使用过CALayer变换,所以我不知道事情是否在起作用。我在我正在创建的UIViews上覆盖了layoutSubviews
,并且由于一个错误,旋转CALayer的行为触发了这个调用然后推动子组件框架。
答案 1 :(得分:0)
问题是CALayers默认情况下不会实际执行3D透视。为此,您需要对图层的变换(CATransform3D类型)进行微小更改
您想要将变换的.m34字段更改为较小的负值。尝试-1/200到-1/500作为起始范围。如果我没记错的话,它应该是图像高度/宽度的负1。
更改要显示为“离开页面”的图层的.m34属性并以3D方式旋转。当你这样做时,图层的Z设置确实很重要,并且会使更近的层更大,并且使更远的层消失在其他东西之后。
我建议您在“CATransform3D m34”上进行Google搜索,以获取更多信息。关于它的网上有大量的信息。