Без кода для обработки поворотов или изменения чего-либо, когда мое устройство поворачивается из портретного в горизонтальное положение, модель, загруженная и центрированная в представлении SceneKit, меняет перспективу, масштаб и растяжение.
ViewController имеет представление SceneKitэто прикреплено к вершине, основанию и сторонам родительского представления.Это подтверждается, чтобы придерживаться даже при повороте.
Требуются устройства iPhone SE до 12,9 iPad Pro.
На iPad эта визуальная проблема значительно уменьшена, но на iPhone искажения, масштабирование и изменения перспективы удивительно очевидны.
Я не знаю, как вставлять фотографии, иначе я бы показал вам, ноесли модель расположена спереди и по центру и имеет квадратную форму 1 на 1 дюйм на портретном iPhone, при повороте на альбомную ориентацию она становится равной 0,25 дюйма по вертикали и 0,5 дюйма по горизонтали.
Вот код, устанавливающий сцену.
let scene = SCNScene()
let shipScene = SCNScene(named: "merchant.scn")
guard let shipNode = shipScene?.rootNode.childNode(withName: "merchant", recursively: true)
else
{
fatalError("ShipModel is not found!")
}
self.shipNode = shipNode
self.shipNode?.position = SCNVector3(x:0, y:0, z:0)
scene.rootNode.addChildNode(self.shipNode!)
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light?.type = .omni
lightNode.position = SCNVector3(x:0, y:2, z:10)
let cameraNode = SCNNode()
self.cameraNode = cameraNode
self.cameraNode?.camera = SCNCamera()
self.cameraNode?.position = SCNVector3(x:0, y:0, z:8)
self.cameraNode?.addChildNode(lightNode)
scene.rootNode.addChildNode(self.cameraNode!)
self.sceneKitView?.scene = scene
self.sceneKitView?.showsStatistics = false
self.sceneKitView?.backgroundColor = #colorLiteral(red: 0.08822073042, green: 0.08822073042, blue: 0.08822073042, alpha: 1)
self.sceneKitView?.allowsCameraControl = false
НИЧЕГО больше не происходит в классе, но растяжения, уменьшения масштаба и изменения перспективы происходят при вращении устройства.
Они хуже на iPhone, но значительно уменьшены на iPad.