改变观点问题

时间:2015-01-30 12:58:11

标签: ios scenekit

我遇到了意外地改变场景工具包中的观点的问题。 在调试时我可以看到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];

1 个答案:

答案 0 :(得分:0)

这就是我解决由我引起的问题的方法。首先是关于这个项目。我有一个SCNView SKSceneUITableViewController。该表包含指向场景上节点的不同单元格的菜单。每个节点都有自己的摄像头。如果用户选择菜单条目,则视点会根据问题中的说明更改为该对象的相机。除了动画相机到相机的变化之外,当用户触摸并拖动屏幕时,我不得不为相机轨道制作动画。所以我在开始时使用了SCNTransaction,但却以某种方式错误地禁用了行[SCNTransaction commit];。重新学习的一课,对于每个“开始”需要“提交”,否则会发生意外行为。(解决方案提醒我忘记提交sqlite插入或更新)。