我有一个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()。
以下是我的尝试:
我可能会遗漏一些重要内容吗?
编辑:忘了一行。
答案 0 :(得分:2)
为每个SCNPlane
创建不同的SCNNode
。如果为多个节点创建单个SCNPlane
,则它们将共享几何。在几何体上设置材质将更改使用该几何体的所有节点。