2015-05-20 21 views
9

Mam widok tabeli z paskiem wyszukiwania w tableHeaderView, zarządzanym przez UISearchController. Używam standardowej animacji prezentacji UISearchController.Jak animować razem z animacją prezentacji/zwolnienia UISearchController?

Chcę animować inny widok o tym samym czasie trwania, co animacja SearchBar. Próbowałem różnych wartości czasu trwania, ale niestety nie pasują idealnie w każdym momencie.

Więc pomyślałem, że byłoby wspaniale korzystać z interfejsu API -[UIViewControllerTransitionCoordinator animateAlongsideTransition:completion:].

Niestety nie mogę znaleźć odniesienia do obiektu <UIViewControllerTransitionCoordinator>. W szczególności, searchController.presentingViewController.transitionCoordinator jest nil.

+1

wszelki wypadek, czy kiedykolwiek rozwiązać ten problem? Mam [podobny problem] (http://stackoverflow.com/questions/35944246/animate-uisearchbar-and-uibarbuttonitem-simultaneous-with-uisearchcontroller) – deadbeef

Odpowiedz

3

Miałem ten sam problem, musiałem animować inne widoki wraz z prezentacją UISearchController; Po wywołaniu przedstawić kontroler przeszukać transitionCoordinator staje się dostępny i można dodać kod, aby ożywić swoje poglądy

Przedstawienie:

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) 
} 

miałem też animować poglądy podczas odwoływania kontroler wyszukiwarki, w tym przypadku realizacji sposobu UISearchControllerDelegatewillDismissSearchController The transitionCoordinator nie jest natychmiast dostępna w tej metodzie, ale co asynchroniczne wywołanie załatwia sprawę

Oddalając:

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

Działa to dla mnie z iOS 9

+0

Jeśli polegasz na tym, że użytkownik dotyka paska wyszukiwania, automatycznie przedstawia 'UISearchController', możesz użyć tej samej techniki w' willPresentSearchController' jak @juanjo użył w 'willDismissSearchController' –