У меня была похожая проблема, когда я использовал экземпляр UIView
(в моем случае, подкласс) в качестве содержимого рассеянного материала на SCNPlane
внутри сцены.
Хотя UIView
широко используется (здесь и в других местах в Интернете) для использования в качестве материала, оно заметно отсутствует в официальной документации Apple по содержанию материала
После просмотра официальной документации, приведенной выше, я решил переключиться на документированный (читай: поддерживаемый) метод - в моем случае UIImage
- и проблема исчезла.Это не значит, что вы не можете продолжать использовать UIView
, и, возможно, это уникально для того, как я это делал, но достаточно просто превратить представление в изображение, прежде чем назначить его в качестве содержимого материала.:
class MyCustomView: UIView {
func renderAsImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { context in
layer.render(in: context.cgContext)
}
}
}
Затем при настройке содержания материала SCNPlane
используйте:
if let view = UINib(nibName: "MyCustomView", bundle: nil).instantiate(withOwner: self, options: nil).first as? MyCustomView {
plane.firstMaterial!.diffuse.contents = view.renderAsImage()
}