2015-02-08 16 views
8

Il mio obiettivo è quello di avviare un'animazione fluida nel primo controller della vista e terminare nel secondo controller della vista.Animazione personalizzata di transizione ritardo sconosciuto tra animazioneControllerForPresentedController e animateTransition

Sto sperimentando l'animazione di transizione utilizzando oggetti conformi ai protocolli UIViewControllerAnimatedTransitioning e UIViewControllerTransitioningDelegate. Ho impostato due controller di visualizzazione (VC) nello storyboard e li ho collegati con segue (visualizzazione predefinita). Ho anche eseguito il metodo unwind segue nel primo VC e impostato un pulsante per questo nel secondo VC.

Ho un problema strano. mio oggetto ha metodi

func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 

    self.presenting = true 
    NSLog("start") 
    return self 
} 

func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 
    if presenting { 
     NSLog("Animation Push") 
     transitionPush(transitionContext) 

    } 
    else { 
     NSLog("Animation Pop") 
     transitionPop(transitionContext) 

    } 
} 

ho due diversi metodi per l'animazione dal primo VC al secondo e dal secondo al primo VC. Attivando segue ho un ritardo molto strano tra i metodi animationControllerForPresentedController e animateTransition. A volte può essere circa 1 secondo, e la mia intera animazione di transizione deve essere 1 secondo più questo ritardo imprevisto è troppo grande. Ecco un registro:

2015-02-08 19:52:33.528 MyApp[1318:119598] start 
2015-02-08 19:52:33.979 MyApp[1318:119598] Animation Push 

Non so il motivo per cui questo ritardo si verificano e se c'è un modo per eliminare o ridurre esso? Ho provato a verificare se questo potrebbe essere il mio codice, ma non ho trovato alcuna prova di ciò. Sentiti libero di chiedere maggiori informazioni.

+0

sono stati in grado di risolvere questo? Anche in esecuzione nello stesso problema. – TWilly

+0

Ho visto questo post discutere del bug di ios8. Ho provato alcuni dei workaround ma non ho ancora ottenuto nulla per funzionare. http://gotoanswer.com/?q=Animation+not+always+visible+from+animateTransition+in+UIViewControllerAnimatedTransitioning – TWilly

+0

@TWilly in questo momento ho messo da parte questo problema, ma ci tornerò presto. Ma ora ho qualche idea a riguardo. Per prima cosa ho descritto nella mia risposta per un altro argomento nella sezione di modifica http://stackoverflow.com/a/25618714/1207902 Penso anche che questo potrebbe essere il mio modello, che ha elaborato i dati troppo a lungo e questo si traduce in un tale ritardo. Ad ogni modo, tornerò su questo problema e cercherò di scrivere una risposta, quando ho finito. Ma puoi controllare i punti che specifichi. –

risposta

4

Ho avuto lo stesso problema. Probabilmente non stai attivando l'animazione dal thread principale (chiamata presentViewController).

Questo risolto il problema per me (codice Objective-C):

dispatch_async(dispatch_get_main_queue(), 
^{ 
    [self presentViewController:viewControllerToPresent 
        animated:YES 
       completion:nil]; 
}); 
+0

Questo non ha funzionato per me. Forse il thread principale è già bloccato per qualche motivo che impedisce la transizione? o il pulsante è in qualche modo disattivato? – TWilly

+0

questo è strano - perché vedo thread principale quando la chiamata è presente, ma il tuo codice mi aiuta – sacred

+2

http://openradar.appspot.com/19563577 – sacred

1

ho trovato la soluzione (soluzione) in discussione here, autore - tamas.zahola

[self presentViewController:myViewController animated:YES completion:nil]; 
dispatch_async(dispatch_get_main_queue(), ^{}); // <--- this line 
Problemi correlati