2015-05-20 8 views
9

Ho una vista tabella con una barra di ricerca nello tableHeaderView, gestita da un UISearchController. Uso l'animazione di presentazione standard UISearchController.Come animare accanto a un'animazione di presentazione/licenziamento UISearchController?

Desidero animare un'altra vista con la stessa durata dell'animazione della barra di ricerca. Ho provato vari valori di durata ma purtroppo non corrispondono perfettamente in ogni momento.

Quindi ho pensato che sarebbe stato bello utilizzare l'API -[UIViewControllerTransitionCoordinator animateAlongsideTransition:completion:].

Purtroppo non riesco a trovare un riferimento dell'oggetto <UIViewControllerTransitionCoordinator>. Nello specifico, searchController.presentingViewController.transitionCoordinator è nil.

+1

Solo nel caso, hai mai risolvere questo problema? Sto riscontrando un [problema simile] (http://stackoverflow.com/questions/35944246/animate-uisearchbar-and-uibarbuttonitem-simultaneously-with-uisearchcontroller) – deadbeef

risposta

3

Ho avuto lo stesso problema, avevo bisogno di animare altre viste accanto alla presentazione dello UISearchController; Dopo la chiamata a presentare il controller di ricerca del transitionCoordinator diventa disponibile ed è possibile aggiungere il codice per animare le vostre opinioni

Presenting:

func search() { 
    let searchController = UISearchController(searchResultsController: resultsController) 
    // Configure search controller 
    self.present(searchController, animated: true) {} 

    self.transitionCoordinator?.animate(alongsideTransition: { (context) in 
     // animate other views 
    }, completion: nil) 
} 

ho dovuto anche per animare i punti di vista, mentre respinge il controller di ricerca, in questo caso implementare il metodo della UISearchControllerDelegatewillDismissSearchController, il transitionCoordinator non è immediatamente disponibile in questo metodo, ma effettua una chiamata asincrona fa il trucco

Respingendo:

func willDismissSearchController(_ searchController: UISearchController) { 
    DispatchQueue.main.async { 
     searchController.transitionCoordinator?.animate(alongsideTransition: { (context) in 
      // animate views 
     }, completion: nil) 
    } 
} 

Questo funziona per me da iOS 9

+0

Se si sta facendo affidamento sull'utente toccando una barra di ricerca per presenta automaticamente 'UISearchController', quindi puoi usare la stessa tecnica in' willPresentSearchController' come @juanjo ha usato in 'willDismissSearchController' –

Problemi correlati