SCNTransaction не запускается при загрузке сцены, если сначала не коснуться сцены.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 SCNTransaction не запускается при загрузке сцены, если сначала не коснуться сцены.

Сообщение Anonymous »

Я создаю SceneKit программным способом и хочу сосредоточиться на всех узлах, которые я добавил с помощью этого метода ниже. И обертываем их внутри SCNTransaction, чтобы анимировать движение.
@objc
func resetCamera() {
SCNTransaction.begin()
SCNTransaction.animationDuration = 0.5

sceneView.defaultCameraController.stopInertia()
sceneView.defaultCameraController.frameNodes(annotationRootNode?.childNodes ?? [])

SCNTransaction.commit()
}

Предварительный просмотр анимации
Он работает прекрасно, однако этот код не запускается при начальной загрузке. Если только я сначала не коснулся экрана вручную.
Буду признателен за любую помощь!

Я пытался поставить их внутри viewDidAppear и sendQueue, и эта штука все равно не запустится, если я сначала не коснусь экрана.
Я также пытался включить несколько свойств SceneKit, такие как isPlaying = true.
Я искал в Google, на форуме разработчиков приложений, в ChatGPT, Stackoverflow и ничего не нашел по этой проблеме.
Как настроить SceneView
func setupViews() {
...
view.addSubview(viewContainer)
viewContainer.addSubview(sceneView)

viewContainer.snp.makeConstraints { make in
make.edges.equalTo(view.safeAreaLayoutGuide).inset(Constants.defaultInset)
}

sceneView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}

sceneView.scene = scene
sceneView.delegate = self
sceneView.overlaySKScene = annotationScene

sceneView.defaultCameraController.automaticTarget = true
sceneView.defaultCameraController.delegate = self
sceneView.defaultCameraController.inertiaEnabled = false

camera.usesOrthographicProjection = true
camera.orthographicScale = 10.0
cameraNode.camera = camera
cameraNode.eulerAngles = SCNVector3(-45.0 * .pi / 180, 45.0 * .pi / 180.0, .zero)
sceneView.pointOfView = cameraNode
sceneView.backgroundColor = .clear
sceneView.allowsCameraControl = true
...
}

Как я настраиваю сцену
func loadAnnotations(with nodes: [NodesData]) {
annotationRootNode = SCNNode()
for node in nodes {
let geometry: SCNGeometry = SCNSphere(radius: 1.0)
let child: SCNNode = SCNNode(geometry: geometry)
child.name = node.name
child.position = node.position
child.position.y = Float(node.level) * 5.0

if levelNodesDict[node.level] == nil {
let currLevelNode: SCNNode = SCNNode()
currLevelNode.addChildNode(child)
levelNodesDict[node.level] = currLevelNode
}
else {
levelNodesDict[node.level]?.addChildNode(child)
}
}

for node in levelNodesDict.values {
annotationRootNode?.addChildNode(node)
}

if let annotationRootNode {
scene.rootNode.addChildNode(annotationRootNode)
scene.rootNode.worldPosition = .init(x: .zero, y: .zero, z: .zero)
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... pped-first
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»