我正在尝试创建一个包含几个3D多维数据集的视图,这些视图是从包含视图的中心角度来看的。
当我将多维数据集视图设置为容器视图的直接子视图,然后按如下所示设置透视图时;
var perspective = CATransform3DIdentity
perspective.m34 = -1.0/250
containerView.layer.sublayerTransform = perspective
3d透视变换按预期方式工作。但是,如果我先将多维数据集视图添加到innerContainerView,然后再将其添加到父容器视图,则透视图将丢失。我用created a playground来说明我的问题。
let containerView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 667.0, height: 375.0))
containerView.backgroundColor = UIColor.grayColor()
XCPlaygroundPage.currentPage.liveView = containerView
let green = UIColor.greenColor()
let blue = UIColor.blueColor()
let red = UIColor.redColor()
let purple = UIColor.purpleColor()
let yellow = UIColor.yellowColor()
let orange = UIColor.orangeColor()
var perspective = CATransform3DIdentity
perspective.m34 = -1.0/250
containerView.layer.sublayerTransform = perspective
let cubeView1 = CubeView(frontColor: green, backColor: blue, topColor: red, rightColor: purple, bottomColor: yellow, leftColor: orange)
cubeView1.frame = CGRectMake(50, 50, 100, 100)
let innerContainerView = UIView(frame: CGRectMake(0, 100, 200, 200))
innerContainerView.backgroundColor = UIColor.lightGrayColor()
containerView.addSubview(innerContainerView)
innerContainerView.addSubview(cubeView1)
let cubeView2 = CubeView(frontColor: green, backColor: blue, topColor: red, rightColor: purple, bottomColor: yellow, leftColor: orange)
cubeView2.frame = CGRectMake(400, 200, 100, 100)
containerView.addSubview(cubeView2)
我正在尝试在左立方体的右立方体中创建相同的透视图。那么为什么在添加中间视图时却丢失了透视图呢?
最佳答案
CoreAnimaton渲染模型始终将渲染操作平放在父层上。此规则的一个例外是CATransformLayer
,它不进行任何拼合,而只是将转换通过。使用UIView
作为CATransformLayer
创建layerClass
并将其用作innerContainerView
应该可以解决此问题。
关于ios - 了解3D Core Animation中的透视变换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37636561/