UISearchBar:奇怪的扩展动画
Posted
技术标签:
【中文标题】UISearchBar:奇怪的扩展动画【英文标题】:UISearchBar: weird expanding animation 【发布时间】:2012-05-30 01:24:58 【问题描述】:我在Interface Builder中使用UISearchBar+SearchDisplayController提供的UISearchBar,搜索栏位于view的右侧,激活时需要向左展开,但系统好像展开了向右(在我的情况下,它超出了屏幕),我尝试在它被激活时对其进行动画处理,但系统的动画仍然发生并且有一些看起来很奇怪的动画。
有没有办法解决这个问题?
非常感谢!
【问题讨论】:
【参考方案1】:这是我对类似问题的回答:here 和 here
正确动画的关键是将UIViewAnimationOptionLayoutSubviews
指定为动画的选项。
这是我对这些类似问题的完整回答:
通常您不想将搜索栏放在工具栏内,但是,您似乎想做一些类似于我所做的事情。
这就是我的做法,它可能被称为 hack,但它就像一个魅力:)
首先你必须像这样在界面生成器中设置它:
请注意,搜索不是工具栏的子项,而是在上面。
搜索栏应该有“清晰的颜色”背景和灵活的左、右和宽度自动调整蒙版。
您在工具栏下方放置了一个黑色背景的 1 像素标签,即。 [x=0, y=44, width=320 or frame width, height=1],还有灵活的左右和宽度自动调整大小的蒙版。这是在搜索显示控制器显示表格后隐藏你得到的一个可见像素看法。在没有它的情况下尝试一下以了解我的意思。
您设置任何工具栏项目并确保为它们提供出口,因为您将需要这些。
现在是代码...
当您开始搜索时:
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
// animate the search bar to the left ie. x=0
[UIView animateWithDuration:0.25f animations:^
CGRect frame = controller.searchBar.frame;
frame.origin.x = 0;
controller.searchBar.frame = frame;
];
// remove all toolbar items
[self.toolbar setItems:nil animated:YES];
当你结束搜索时
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
// animate search bar back to its previous position and size
// in my case it was x=55, y=1
// and reduce its width by the amount moved, again 55px
[UIView animateWithDuration:0.25f
delay:0.0f
// the UIViewAnimationOptionLayoutSubviews is IMPORTANT,
// otherwise you get no animation
// but some kind of snap-back movement
options:UIViewAnimationOptionLayoutSubviews
animations:^
CGRect frame = self.toolbar.frame;
frame.origin.y = 1;
frame.origin.x = 55;
frame.size.width -= 55;
controller.searchBar.frame = frame;
completion:^(BOOL finished)
// when finished, insert any tool bar items you had
[self.toolbar setItems:[NSArray arrayWithObject:self.currentLocationButton] animated:YES];
];
有了这个,我得到了一个漂亮的动画:)
【讨论】:
以上是关于UISearchBar:奇怪的扩展动画的主要内容,如果未能解决你的问题,请参考以下文章
UISearchBar 设置为 titleView 在 push segue 上的行为很奇怪
Black Opaque UIToolbar 和 UISearchBar 看起来差别太大了