/ / Single SKAction Animácia na niekoľkých uzloch pomocou slučky s obsluhou dokončovania - ios, objektív-c, rýchly, sprite-kit, komplet

Jednoduchá animácia SKAction na viacerých uzloch pomocou slučky s obsluhou dokončovania - ios, objektív-c, rýchly, sprite-kit, komplet

Cieľ: Použiť jednu animáciu SKAction na niekoľkých uzloch pomocou slučky, zatiaľ čo čaká na spracovanie.

    func animateShuffle(cards: [Card], completionHandler:(success: Bool) -> Void) {
var rotationInRadians:CGFloat = CGFloat(M_PI)
var rotateFirstDeck = SKAction.rotateByAngle(rotationInRadians, duration: 1.0)
var moveFirstDeck = SKAction.moveToX(-150, duration: 1.0)
var returnToOrigPosition = SKAction.moveToX(-125, duration: 1.0)
var firstDeckSequence = SKAction.sequence([moveFirstDeck, rotateFirstDeck, returnToOrigPosition])
var rotateSecondDeck = SKAction.rotateByAngle(-rotationInRadians, duration: 1.0)
var moveSecondDeck = SKAction.moveToX(-100, duration: 1.0)
var secondDeckSequence = SKAction.sequence([moveSecondDeck, rotateSecondDeck, returnToOrigPosition])


for (index, Card) in enumerate(cards){

if index % 2 == 0{
Card.image.runAction(firstDeckSequence)
}
else{
Card.image.runAction(secondDeckSequence)
}
}

//hack
cards[0].image.runAction(firstDeckSequence, completion: { () -> Void in
completionHandler(success: true)
})

}

Tu nazývam funkciu, ktorá začína inú animáciu:

animateShuffle(newDeck.deck, completionHandler: { (success) -> Void in
print("entered")
var drawnCards = [Card]()
if let areThereCards = newDeck.drawCards(4){
drawnCards = areThereCards
}
self.dealCards(drawnCards)
})

Použil som hack, aby som sa dostal na 99%, kde chcem byť, ale moje črevá mi hovorí, že je lepší spôsob, ako to urobiť. Ako môžem povedať, kedy posledný uzol skončil animáciu?

odpovede:

1 pre odpoveď č. 1

Obe sekvencie bežia po dobu 3 sekúnd, takže keďprvý blok dokončenia, môžete bezpečne predpokladať, že sú všetky hotové. Ak chcete byť 100% istý, nastavte bool ivar v obslužnom nástroji na dokončenie a potom spustite kód post-sekvencie v priečinku didEvaluateActions metóda scény.

Alternatívne spočítajte, koľko sekvencií spustíte, potom zvýšite počítadlo v dokončovacom bloku a spustite kód, keď sa oba počítadlá zhodujú.