大佬教程收集整理的这篇文章主要介绍了ios – 自定义UISearchController动画,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何覆盖退出属于UISearchController的searchBar的默认动画?
标准搜索控制器行为:
好的,所以我试图创建一个自定义动画,当连接到UISearchController的UISearchBar变为活动时.标准动画似乎希望searchBar以占用屏幕的宽度开始.当动画开始时,缩小搜索范围并在其右侧的取消按钮中渐变.
我想要实现的
我想让我的searchBar开始在一个小的状态,大约是屏幕宽度的一半,以允许两个按钮放置在旁边的导航栏中.
现在动画:
当searchBar变为活动时,我想让动画展开searchBar,取消按钮淡入.
取消动画:
当searchBar被关闭时,我想要发生恰好相反的动画:取消按钮淡出,并且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,self.wBounds - 10 - self.createMoxyButton.frame.size.width - 20 - self.centerMapButton.frame.size.width - 20,searchController.searchBar.frame.height) self }) }
问题解除SearchBar的图像
Gif动画从处于活动状态的searchBar开始,取消按钮可见
import UIKit class ViewController: UIViewController,UISearchBarDelegate,UISearchControllerDelegate,UISearchResultsupdating { lazy var createMoxyButton:UIBarButtonItem = { //customize this as your equire let button = UIBarButtonItem(title: "Done",style: .Plain,target: nil,action: nil) return button }() lazy var centerMapButton:UIBarButtonItem = { //customize this as your equire let button = UIBarButtonItem(title: "Done",action: nil) return button }() lazy var searchController:UISearchController = { let controller = UISearchController(searchResultsController: self) controller.delegate = self controller.searchResultsupdater = self controller.dimsBACkgroundDuringPresentation = false controller.hidesNavigationBarDuringPresentation = false return controller }() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. self.navigationItem.titleView = self.searchController.searchBar self.navigationItem.rightBarButtonItems = [self.centerMapButton,self.createMoxyButton] self.edgesForExtendedLayout = UIRectEdge.None self.searchController.searchBar.delegate = self } func updateSearchResultsForSearchController(searchController: UISearchController) { } func searchBarTextDidBeginEdiTing(searchBar: UISearchBar) { //this needs to be done because in shouldEndEdiTing //we need to set it to false to smooth animation searchBar.showsCancelButton = true self.navigationItem.setrightBarButtonItems(nil,animated: truE) } func searchBarShouldEndEdiTing(searchBar: UISearchBar) -> Bool { searchBar.showsCancelButton = false self.navigationItem.rightBarButtonItems = [self.centerMapButton,self.createMoxyButton] return true } }
以上是大佬教程为你收集整理的ios – 自定义UISearchController动画全部内容,希望文章能够帮你解决ios – 自定义UISearchController动画所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。