无法为SCNPlane阵列

时间:2016-01-04 16:08:22

标签: ios swift calayer scenekit

我有一个SCNPlane对象数组,我想为每个对象添加不同的图像。我的问题是每当我在for循环中初始化SCNPlanes时,每个平面最终都会得到完全相同的图像。这是我的循环基本上看起来像:

var layer = [CALayer](count: 8, repeatedValue: CALayer())
var tmpPhoto = [CGImage]()

for var i = 0; i < 8; ++i{
    tmpPhoto.append("image data")
    layer[i].contents = tmpPhoto[i]
    layer[i].frame = CGRectMake(0, 0, "image width", "image height")

    //initialize the SCNPlane and add it to an array of SCNNodes

    plane[i].geometry?.firstMaterial?.locksAmbientWithDiffuse = true
    plane[i].geometry?.firstMaterial?.diffuse.contents = layer[i]

    //add SCNPlane constraints
}

我注意到显示的图像将是添加/更改的最后一张图像。我知道这是因为在这个循环之后,我尝试仅修改平面数组中的第一个条目。在运行时,第一个数组条目的图像将显示在所有其他SCNPlanes上!请记住,我根本不使用displayLayer()或setNeedsDisplay()。

以下是我的尝试:

  • 使用类似的图层变量而不是数组,只是在每个循环开始时修改它
  • 在循环外操纵图层变量
  • 直接添加UIImage而不先转换为CGImage(我知道每个图像都被加载到数组中)
  • 尝试直接修改SCNPlane的图层
  • 使用SCNMaterial变量(后跟this,但每个SCNPlane的材质变量都添加了一层)
  • 使用addSublayer()(不起作用)或layoutSublayersOfLayer()(由于未捕获的异常导致应用程序崩溃)将图层添加到现有视图结构中

我可能会遗漏一些重要内容吗?

编辑:忘了一行。

1 个答案:

答案 0 :(得分:2)

为每个SCNPlane创建不同的SCNNode。如果为多个节点创建单个SCNPlane,则它们将共享几何。在几何体上设置材质将更改使用该几何体的所有节点。