首页 文章

CALayer旋转似乎是表面上方的孩子

提问于
浏览
0

这是带有四个嵌套 UIView 的iPad模拟器,绘制自定义背景和内部 UILabel . 我正在旋转顶层 UIView 's CALayer, by getting it'的图层并使用rotateY CATransform3D 设置 transform ,在单独的线程上进行动画处理(但是主线程上的更改自然会发送到 transform ):

Oh deary me

注意 - 此动画无法正确循环,因此它似乎反弹 .

这些图层作为一个整体动画,但奇怪的是,第一个孩子和它的后代似乎漂浮在 UIView 上方并应用了变换!

UIView s本身是另一个 UIView 中的孩子,其背景为红色 . 其他任何地方都没有应用其他转换 .

每个UIView的位置最初都是使用 setFrame 设置的 .

是什么导致了这种奇怪的行为,我怎样才能确保孩子与父母一起变换,使整个表面呈现平坦的外观?

2 回答

  • 0

    好 . 也许不出所料我做了些傻事,但是因为我知道事情是否在起作用 . 我在我创建的UIViews上覆盖了 layoutSubviews ,旋转CALayer的行为触发了这个调用,然后由于一个错误而推动子组件框架 .

  • 1

    问题是CALayers默认情况下并不实际执行3D透视 . 为了做到这一点,你需要对图层的变换进行微小的更改(类型为CATransform3D)

    您想要将变换的.m34字段更改为较小的负值 . 尝试-1/200到-1/500作为起始范围 . 如果我没记错的话,它应该是图像高度/宽度的负1 .

    更改要显示为“离开页面”的图层的.m34属性并以3D方式旋转 . 当你这样做时,图层的Z设置确实很重要,并且会使更近的层更大,并且使更远的层消失在其他东西之后 .

    我建议您在“CATransform3D m34”上进行Google搜索以获取更多信息 . 关于它的网上有大量的信息 .

相关问题