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