Вопрос в нижней строке:
Как переопределить анимацию по умолчанию для увольнения searchBar, принадлежащего UISearchController?
Стандартное поведение контроллера поиска:
Хорошо, поэтому я пытаюсь создать настраиваемую анимацию, когда активируется UISearchBar, подключенный к UISearchController. Кажется, стандартная анимация ожидает, что searchBar начнется с ширины, которая занимает экран. Когда анимация начинается, она сжимает SearchBar и исчезает в кнопке отмены справа от нее.
Что я хочу достичь:
Я хочу, чтобы мой searchBar начинался в небольшом состоянии, примерно на половину ширины экрана, чтобы можно было разместить две кнопки на панели навигации рядом с ней.
Присутствующая анимация:
Когда функция searchBar становится активной, я хочу, чтобы анимация расширила область поиска и нажала кнопку отмены.
Отключение анимации:
Когда отклоняется запрос searchBar, я хочу, чтобы произошла полная противоположная анимация: кнопка Cancel отменилась, а searchBar уменьшился до первоначального размера.
Проблема:
Я нашел способ добиться желаемой анимации представления с помощью метода UISearchControllerDelegate, presentSearchController:
func presentSearchController(searchController: UISearchController) {
// Animate Buttons
UIView.animateWithDuration(0.1, animations: {
// First Hide Buttons
self.createMoxyButton.alpha = 0
self.centerMapButton.alpha = 0
})
// Animate Search Bar
UIView.animateWithDuration(0.5, animations: {
// Search Bar
searchController.searchBar.frame = CGRectMake(searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, self.wBounds - 40, searchController.searchBar.frame.height)
self
})
}
но я не смог добиться анимации увольнения. Я попытался использовать метод didDismissSearchController: и willDismissSearchController: делегировать, но это приводит к странному поведению и не использует анимацию кадров, которые я установил в этих соответствующих методах делегата. Когда searchBar будет уволен, он будет расширяться до полной ширины экрана, в то время как исчезает кнопка отмены, тогда она сразу же изменит кадр в SearchBar обратно на исходный размер, игнорируя мою анимацию. Я также попытался использовать метод removeAllAnimation(), чтобы попытаться остановить анимацию по умолчанию, но безрезультатно.
func didDismissSearchController(searchController: UISearchController) {
searchController.searchBar.layer.removeAllAnimations()
// Animate
UIView.animateWithDuration(0.5, animations: {
// Show hidden buttons
self.createMoxyButton.alpha = 1
self.centerMapButton.alpha = 1
// Search Bar
searchController.searchBar.frame = CGRectMake(searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, self.wBounds - 10 - self.createMoxyButton.frame.size.width - 20 - self.centerMapButton.frame.size.width - 20, searchController.searchBar.frame.height)
self
})
}
Изображение проблемы, убирающей SearchBar
Gif Анимация начинается с searchBar в активном состоянии с видимой кнопкой отмены