Calling an SCNAction from the completion handler of RunAction seems to hang SceneKit.
A touch event or rotating the device seems to unblock the hang.
To reproduce:
1) Take the default SceneKit project you get on startup with the rotating spaceship.
2) Replace the animation code:
ship.RunAction(SCNAction.RepeatActionForever(SCNAction.RotateBy(0, 2, 0, 1)));
with:
ship.RunAction(SCNAction.RotateBy(0, 2, 0, durationInSeconds: 3.0f), delegate
{
Console.WriteLine("DONE ROTATE");
ship.RunAction(SCNAction.MoveBy(1, 0, 0, durationInSeconds: 3.0f), delegate
{
Console.WriteLine("DONE MOVEBY");
});
});
3) Run on the simulator or real device (the problem is the same on both)
4) The results is:
Spaceship rotates OK
DONE ROTATE is printed out OK
Now it's hung
Tap the screen (or rotate the device to landscape) and then the move happens OK and DONE MOVEBY is printed out.
I'm using C# and Visual Studio for Mac, but I suspect it happens using Xcode too.
Is this a bug in SceneKit? How can a workaround be done?
Maybe this is the same issue as described here: