我有一个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()(由于未捕获的异常导致应用崩溃)将图层添加到现有视图结构中

    我会错过一些重要的东西吗?

    编辑:忘记了一行。

    最佳答案

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

    关于ios - 无法将多个图像用于SCNPlane数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34595179/

  • 10-12 05:33