При вызове SCNAction из обработчика завершения RunAction, похоже, зависает SceneKit.
Сенсорное событие или вращение устройства, кажется, разблокирует зависание.
Воспроизвести:
1) Возьмите проект SceneKit по умолчанию, который вы получаете при запуске с вращающимся космическим кораблем.
2) Заменить код анимации:
ship.RunAction(SCNAction.RepeatActionForever(SCNAction.RotateBy(0, 2, 0, 1)));
с:
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) Запуск на симуляторе или реальном устройстве (проблема одинакова на обоих)
4) Результат:
Космический корабль вращается в порядке
DONE ROTATE распечатан OK
Теперь повешено
Коснитесь экрана (или поверните устройство в горизонтальное положение), и затем перемещение произойдет в порядке, и DONE MOVEBY будет распечатано.
Я использую C # и Visual Studio для Mac, но подозреваю, что это происходит и с Xcode.
Это ошибка в SceneKit? Как можно обойти это?
Может быть, это та же проблема, что и здесь:
Обработчик завершения SCNAction ожидает выполнения жеста