SpriteKit: ¿Cómo llamar a una function dentro de SKAction.sequence?

Estoy intentando llamar a una function una vez que se elimina un sprite de un padre para que el sprite pueda replicarse e ingresar de nuevo en la escena.
Cada vez que lo hago en mi código actual, se replica antes de que el sprite original se elimine del padre, lo que resulta en sprites duplicates.

Aquí está mi código hasta ahora:

import SpriteKit let plankName = "woodPlank" class PlankScene: SKScene { var plankWood : SKSpriteNode? var plankArray : [SKSpriteNode] = [] override func didMove(to view: SKView) { plankWood = childNode(withName: plankName) as? SKSpriteNode let swipeRight : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(PlankScene.swipedRight)) swipeRight.direction = .right view.addGestureRecognizer(swipeRight) } func swipedRight(sender: UISwipeGestureRecognizer) { if sender.direction == .right { let moveOffScreenRight = SKAction.moveTo(x: 400, duration: 0.5) let nodeFinishedMoving = SKAction.removeFromParent() plankWood?.run(SKAction.sequence([moveOffScreenRight, nodeFinishedMoving])) } //Functions To Be Call After Sequence Finishes addPlank() movePlanksUp() } func addPlank() { let newPlank = plankWood?.copy() as! SKSpriteNode newPlank.position = CGPoint(x: 0, y: -250) plankArray.append(newPlank) print(plankArray.count) addChild(newPlank) } func movePlanksUp() { for node:SKSpriteNode in plankArray { node.run(SKAction.move(by: CGVector(dx: 0, dy: 250), duration: 0.10)) } } } 

terminación

replace:

 plankWood?.run(SKAction.sequence([moveOffScreenRight, nodeFinishedMoving])) } //Functions To Be Call After Sequence Finishes addPlank() movePlanksUp() 

con:

  plankWood?.run(SKAction.sequence([moveOffScreenRight, nodeFinishedMoving]), completion:{ //Functions To Be Call After Sequence Finishes addPlank() movePlanksUp()} )