У меня есть массив объектов SCNPlane, и я хочу добавить разные изображения к каждому. Моя проблема в том, что всякий раз, когда я инициализирую SCNPlanes в цикле for, каждая плоскость будет иметь то же самое изображение. Вот что мой цикл в основном выглядит следующим образом:Невозможно использовать несколько изображений для массива SCNPlane
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 непосредственно
- с использованием SCNM aterial variable (после this, но с одним слоем, добавленным к переменной материалов для каждого SCNPlane)
- добавление слоев в существующие структуры представлений с использованием либо addSublayer() (не работает), либо layoutSublayersOfLayer() (сбой приложения из-за неперехваченное исключение)
Могу ли я упустить что-то важное?
EDIT: Забыли номер.
Ваш пост дал мне хорошую идею. Я переместил объявление для геометрии для SCNPlane в самый верх цикла for. Добавьте в метод SCNMaterial, и теперь все работает. Благодарю. –