2014-06-27 11 views
5

Ho provato così tante combinazioni per chiamare animateAlongSideTransition in Swift per un coordinatore di transizione. Mi sento come se mi mancasse qualcosa di molto stupido.Come chiamo animateAlongsideTransition in Swift?

Se voglio chiamare questo (da docs Swift):

func animateAlongsideTransition(_ animation: ((UIViewControllerTransitionCoordinatorContext!) -> Void)!, 
        completion completion: ((UIViewControllerTransitionCoordinatorContext!) -> Void)!) -> Bool 

Come potrei farlo? Voglio solo passare alcune cose nel blocco di animazione e niente nel blocco di completamento.

risposta

7

questo è sicuramente quello che si vuole fare:

coordinator.animateAlongsideTransition({ context in 
     // do whatever with your context 
     context.viewControllerForKey(UITransitionContextFromViewControllerKey) 
    }, completion: nil) 

È anche possibile omettere i parametri, se si utilizzano le variabili come $0 per la prima parametro implicito e così

coordinator.animateAlongsideTransition({ 
     $0.viewControllerForKey(UITransitionContextFromViewControllerKey) 
    }, completion: nil) 

I in sorprese sintassi all'inizio, ma devi impararlo solo una volta :)

  • Il riccio staffe definisce il blocco all'interno della funzione
  • si utilizza in per separare i parametri dal corpo del blocco
  • Ma, come ho detto sopra, è possibile omettere i parametri utilizzando $0, $1, $2 e così ...

Sembra che ci sia una sintassi più prolisso, ma sicuramente non adatta allo spirito Swift (e io sono troppo pigro per inviare lì)

Speranza che aiuta (e non dimentico nulla .. .)

Edit:

Un altro suggerimento Pro è quando il blocco è l'unico parametro, si può anche omettere le parentesi
(Il prossimo non funziona, ma è di capire l'idea)

coordinator.animateAlongsideTransition{ 
     $0.viewControllerForKey(UITransitionContextFromViewControllerKey) 
    } 
2

lo fate come questo (almeno in Swift 1.2):

transitionCoordinator.animateAlongsideTransition({context in //things to animate, for example: view.alpha = 0.5 
}, completion: nil)