Я столкнулся с проблемой с меняющейся точкой зрения в наборе сюжетов неожиданно. во время отладки я видел, что у self.sceneView.pointOfView
был предыдущий узел камеры, а установка нового узла камеры не повлияла ни на что на экране. это происходит неожиданно даже без setCompletionBlock
. иногда это происходит после первой смены зрения и других времен в самое позднее время. и впоследствии не может быть изменен, и я должен убить и перезапустить, чтобы заставить его работать. любая идея, что я делаю неправильно? следующий код запускается после приема NSNotification
смена точки зрения вопрос
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:4];
[SCNTransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
MenuEntery *menu = [notification object];
switch (menu.menuEntryType)
{
case kMenuS:
{
self.sceneView.pointOfView = _cameraNodeForS;
[SCNTransaction setCompletionBlock:^{
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:2];
[SCNTransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
self.sceneView.pointOfView = _cameraNodeForS2;
[SCNTransaction commit];
}];
break;
}
//and other cases will here in between
}
[SCNTransaction commit];
редактирования: Камеры
_cameraNodeForS = [SCNNode node];
_cameraNodeForS.camera = [SCNCamera camera];
_cameraNodeForS.position = SCNVector3Make(0, 0, S_DIST);
_cameraNodeForS.camera.xFov = 50;
_cameraNodeForS.camera.zFar = 2100000;
_cameraNodeForS.camera.aperture = 1/50;
_cameraNodeForSOrbit = [SCNNode node];
[_cameraNodeForSOrbit addChildNode:_cameraNodeForS];
_cameraNodeForS2 = [SCNNode node];
_cameraNodeForS2.camera = [SCNCamera camera];
_cameraNodeForS2.position = SCNVector3Make(0, 0, 10000);
_cameraNodeForS2.camera.xFov = 50;
_cameraNodeForS2.camera.zFar = 2100000;
_cameraNodeForS2.camera.aperture = 1/50;
_cameraNodeForS2Orbit = [SCNNode node];
[_cameraNodeForS2Orbit addChildNode:_cameraNodeForS2];
Трудно сказать, что здесь. Лучше догадаться, что ваше уведомление не доставляется в основной поток, поэтому вы разговариваете с SceneKit из фонового потока. Повторно отправьте в основную очередь перед транзакцией и посмотрите, помогает ли это? – rickster
@ rickster Спасибо за ответ. Я нашел проблему, вызванную другим [SCNTransaction begin], который не имел фиксации. это была очень глупая ошибка. –
Отлично! Это поможет другим людям с подобными проблемами, если вы немного подробнее расскажете об этом в ответе (а затем примите свой собственный ответ). – rickster