2016-07-06 5 views
0

Ich bin neu in SceneKit und ich könnte Ihre Hilfe mit folgenden verwenden: Ich habe zwei SCNViews - eine große (skView) zeigt die Szene für den Benutzer, der sein kann durch den Benutzer mit dem Standard allowsCameraControl Option manipulierten aktiviert - eine weitere kleine (coordinateCrossView) in der linken Ecke, die einen Quer Koordinate zeigt, die Ich mag würde der Benutzer in den großen SCNView führtDrehen eines Koordinatenkreuzes in SCNScene, um Kamerabewegungen zu spiegeln

coordinate cross SCNView

jeder Kamera Navigation spiegeln

Ich implementierte es, indem ich den ViewController mache, der beide SC enthält NViews ein SCNRendererDelegate und durch das Kreuz Orientierung im Renderer Aktualisierung: updateAtTime: Methode wie folgt:

- (void)renderer:(id<SCNSceneRenderer>)renderer updateAtTime:(NSTimeInterval)time { 

    [self.coordinateCrossView.scene.rootNode childNodeWithName:@"cross" recursively:YES].orientation = self.skView.pointOfView.orientation; 
    [self.coordinateCrossView setNeedsDisplay]; 
} 

So weit so gut. Dies funktioniert jedoch nur, wenn der Benutzer das große SCNView mit einem Finger auf dem Bildschirm manipuliert. Nach einer Wischgeste, wenn der Finger den Bildschirm verlässt, dreht sich das Objekt in der großen SCNView weiter, aber das Koordinatenkreuz wird nicht aktualisiert. Irgendwelche Ideen, warum dieses Verhalten nicht von den pointOfVIEW.orientation Änderungen erfasst wird?

Antwort

0

Ich fand heraus, was das Problem war: die kleine KoordinateCrossView wurde nicht kontinuierlich aktualisiert und daher obwohl die Koordinatenkreuzorientierung geändert wurde, zeigte die Ansicht es nicht - obwohl setNeedsDisplay aufgerufen wurde. Ich habe das Problem behoben, indem ich die Eigenschaft isPlaying von "coordinateCrossView" gesetzt habe, die eine Aktualisierung erzwingt.