2016-03-21 11 views
6

Sto provando a eseguire un'animazione di transizione personalizzata. Ho creare un oggetto di animazione che si conforma a UIViewControllerAnimatedTransitioning:Nil quando unwrapping viewForKey (UITransitionContextFromViewKey) (Swift)

import UIKit 

class ViewControllerAnimator: NSObject, UIViewControllerAnimatedTransitioning { 

    let duration = 1.0 

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { 
     return duration 
    } 

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

     let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! 

     //Animate out 
     UIView.animateWithDuration(duration, animations: {() -> Void in 
      fromView.frame.origin.x -= 200 
      }) { (Bool) -> Void in 
       transitionContext.completeTransition(true) 

     } 

    } 

} 

sto ottenendo un errore quando si cerca di impostare la cornice di fromView. Si schianta sul tentativo di forzare il nulla. Cosa sto facendo di sbagliato qui? Perché il mio fromView nil?

+0

errore va qui lasciare fromView = transitionContext.viewForKey (UITransitionContextFromViewKey)! – iMuzahid

+0

@ Md.MuzahidulIslam sì. Sai perché ha un errore qui? – Kex

+0

Perché stai tentando di scartare forzatamente il valore nullo. Scrivi questa riga in questo modo, se lasciato daView = transitionContext.viewForKey (UITransitionContextFromViewKey) { } else { // handle nil value } – iMuzahid

risposta

13

Trovato la risposta a questo se qualcun altro sta avendo questo problema. Ho avuto myViewController.modalPresentationStyle = .Custom. Per qualche ragione questo sembra essere un bug e lo fa andare in crash. Anche il controller fromView non viene rimosso correttamente dalla vista Contenitore quando è impostato transitionContext.completeTransition(true). Basta rimuovere la linea di stile di presentazione personalizzata e funzionerà.

+1

Questo è in realtà un bug rapido. Se traduci il codice in ObjC, funziona anche usando lo stile di presentazione .Custom. :-( – SuperDuperTango

+0

Ho riscontrato questo comportamento su iOS 9 anche con il codice scritto in ObjC. – erikprice

+0

buon (abbastanza) aggirare è 'lascia daView = transitionContext.viewController (forKey: .from) !. view!' Come a volte è necessario imposta il 'modalPresentationStyle' come per mostrare una vista sul contesto corrente – Tony

1

Questo è il comportamento previsto:

Se NO viene restituito dal -shouldRemovePresentersView, la vista associato con UITransitionContextFromViewKey è pari a zero durante presentazione. Questo voleva essere un suggerimento che il tuo animatore dovrebbe NON sta manipolando la vista del controller di visualizzazione che presenta. Per un licenziamento , viene restituito il -presentedView.

https://developer.apple.com/library/content/samplecode/CustomTransitions/Listings/CustomTransitions_Custom_Presentation_AAPLCustomPresentationController_m.html

Problemi correlati