SpriteKit: обратный вызов, когда сцена завершена?

Есть ли в SpriteKit обратный вызов, когда сцена завершила переход?

Не похоже, что функция SKView presentScene имеет обратный вызов.

Альтернативой является то, что сцена вручную уведомляет вызывающего абонента после того, как сцена перемещается в поле зрения, но я надеялся, что есть более чистый подход с собственным обратным вызовом.


person Crashalot    schedule 15.07.2017    source источник
comment
нет обратного вызова, о котором я знаю, вам нужно использовать moveFromView на старой сцене   -  person Knight0fDragon    schedule 15.07.2017
comment
@Knight0fDragon, похоже, так оно и есть. пожалуйста, напишите как ответ, чтобы вы могли получить кредит! Спасибо! хотя вам не нужно использовать старую сцену. вы можете использовать события из новой сцены (например, willMove, didMove).   -  person Crashalot    schedule 15.07.2017
comment
вы не можете использовать новую сцену, вы должны использовать старую сцену, новая сцена срабатывает немедленно, а это не то, что вам нужно   -  person Knight0fDragon    schedule 15.07.2017


Ответы (1)


presentScene не имеет известного обратного вызова, когда сцена завершила переходы, вместо этого используйте либо Notifications, либо создайте своего собственного делегата на исходящих сценах func willMove(from:view) для достижения желаемого эффекта.

func willMove(from view:SKView)
{
   NotificationCenter.default.post(name: "TRANSITIONCOMPLETE", object: nil)
   //or create a delegate using protocols, assign the delegate, and call it
   delegate?.finishedTransition()
}

Обратите внимание, вы должны использовать outgoingScenes willMove(from:view), это последнее, что произойдет во время перехода. didMove(to:view) на incomingScene — это начало перехода

person Knight0fDragon    schedule 15.07.2017
comment
правильный, хотя технически, вопрос, заданный для уведомления, когда переход завершен, поэтому didMove является правильным (и что было использовано). Спасибо за помощь! - person Crashalot; 15.07.2017
comment
@Crashalot .... у нас с тобой очень разные определения заключения. Для меня это когда заканчивается переход, то есть willMove(fromView) - person Knight0fDragon; 15.07.2017
comment
вы правы, вывод неоднозначен. формулировка вопроса верна: когда появится новая сцена. - person Crashalot; 15.07.2017
comment
... нет, это не двусмысленно. Вы хотите, когда появится новая сцена, или вы хотите, когда переход завершится? это 2 разные вещи - person Knight0fDragon; 15.07.2017
comment
когда появляется новая сцена, как если бы у presentScene был обратный вызов, когда появилась новая сцена. Спасибо! - person Crashalot; 15.07.2017
comment
... Я не думаю, что вы понимаете, как работают переходы. Я собираюсь предположить, что вы используете очень специфический переход, затухание. Если вы используете затухание и хотите знать, когда ваша сцена появится на экране, вам нужно использовать действие ожидания для входящей сцены, равное 1/2 продолжительности вашего затухания, за которым следует уведомление. Затем вам нужно установить pauseIncomingScene в false на вашем SKTransition - person Knight0fDragon; 15.07.2017