CALayer 旋转似乎 'lift' 它在表面上方 child
CALayer rotation appears to 'lift' it's child above the surface
这是具有四个嵌套 UIView
的 iPad 模拟器,绘制自定义背景和一个内部 UILabel
。我正在旋转顶部 UIView
的 CALayer,通过获取它的层并使用 rotateY CATransform3D
设置 transform
,在单独的线程上设置动画(但对 transform
的更改是自然地在主线程上发送):
注意 - 此动画没有正确循环,因此看起来是弹跳。
层 做 作为一个整体动画,但奇怪的是,第一个 child 和它的后代似乎漂浮在 UIView
之上已申请!
UIView
本身是另一个 UIView
中的 children,它有红色背景。其他任何地方都没有应用其他转换。
每个 UIView 的位置最初都是使用 setFrame
设置的。
是什么导致了这种奇怪的行为,我如何才能确保 child UIView
与它们的 parent 一起变换,使整个表面呈现出平坦的外观?
问题是 CALayers 默认情况下实际上并不进行 3D 透视。为此,您需要对图层的变换(类型为 CATransform3D)进行微小更改
您想将转换的 .m34 字段更改为较小的负值。尝试将 -1/200 到 -1/500 作为起始范围。如果我没记错的话应该是图像上的1的负数height/width.
将要显示的图层的 .m34 属性 更改为 "come off the page" 并在 3D 中旋转。当你这样做时,图层的 Z 设置确实很重要,它既会使较近的图层变大,也会使较远的图层消失在其他东西后面。
我建议您在 "CATransform3D m34" 上进行 Google 搜索以获取更多信息。网上有很多关于它的信息。
嗯。也许不出所料,我做了一些愚蠢的事情,但由于我以前没有使用过 CALayer 转换,所以我不知道事情是否正常。我在我创建的 UIView 上覆盖了 layoutSubviews
,旋转 CALayer 的行为触发了这个调用,然后由于一个错误而推动子组件框架。
这是具有四个嵌套 UIView
的 iPad 模拟器,绘制自定义背景和一个内部 UILabel
。我正在旋转顶部 UIView
的 CALayer,通过获取它的层并使用 rotateY CATransform3D
设置 transform
,在单独的线程上设置动画(但对 transform
的更改是自然地在主线程上发送):
注意 - 此动画没有正确循环,因此看起来是弹跳。
层 做 作为一个整体动画,但奇怪的是,第一个 child 和它的后代似乎漂浮在 UIView
之上已申请!
UIView
本身是另一个 UIView
中的 children,它有红色背景。其他任何地方都没有应用其他转换。
每个 UIView 的位置最初都是使用 setFrame
设置的。
是什么导致了这种奇怪的行为,我如何才能确保 child UIView
与它们的 parent 一起变换,使整个表面呈现出平坦的外观?
问题是 CALayers 默认情况下实际上并不进行 3D 透视。为此,您需要对图层的变换(类型为 CATransform3D)进行微小更改
您想将转换的 .m34 字段更改为较小的负值。尝试将 -1/200 到 -1/500 作为起始范围。如果我没记错的话应该是图像上的1的负数height/width.
将要显示的图层的 .m34 属性 更改为 "come off the page" 并在 3D 中旋转。当你这样做时,图层的 Z 设置确实很重要,它既会使较近的图层变大,也会使较远的图层消失在其他东西后面。
我建议您在 "CATransform3D m34" 上进行 Google 搜索以获取更多信息。网上有很多关于它的信息。
嗯。也许不出所料,我做了一些愚蠢的事情,但由于我以前没有使用过 CALayer 转换,所以我不知道事情是否正常。我在我创建的 UIView 上覆盖了 layoutSubviews
,旋转 CALayer 的行为触发了这个调用,然后由于一个错误而推动子组件框架。