我想从右侧到左侧(对面)调整UIView的大小。
现在我有这样的直观视图:CGRectMake(100.f, 0.f, 100.f, 100.f)
;
[UIView animateWithDuration:0.5 animations:^{
view.frame = CGRectMake(0.f, 0.f, 200.f, 100.f);
}];
问题在于动画效果不佳。它向右反弹(变大)然后移动到位置0.0,0.0。
我希望达到与从左到右调整大小时相同的效果。
编辑:代码
- (void)resizeSearchBar:(int)type
{
//resize - bigger
if (type == 1) {
[UIView animateWithDuration:1.0 animations:^{
self.searchBar.frame = CGRectMake(0.f, 0.f, 280.f, 44.f);
}];
}
//resize - smaller
else {
[UIView animateWithDuration:1.0 animations:^{
self.searchBar.frame = CGRectMake(95.f, 0.f, 185.f, 44.f);
}];
}
}
编辑2
我还尝试在IB中更改View属性:
仍然没有运气......
答案 0 :(得分:7)
使用此答案中的提示:Can't animate the frame or bounds of a UISearchBar
技巧是在设置帧后调用动画块中的[searchBar layoutSubviews];
。
以下是我在我的样本中工作的内容:
- (IBAction)resizeButtonTapped:(id)sender {
//resize - bigger
if (searchBar.frame.origin.x == 95) {
[UIView animateWithDuration:1.0 animations:^{
self.searchBar.frame = CGRectMake(0.f, 0.f, 280.f, 44.f);
[searchBar layoutSubviews];
}];
}
//resize - smaller
else {
[UIView animateWithDuration:1.0 animations:^{
self.searchBar.frame = CGRectMake(95.f, 0.f, 185.f, 44.f);
[searchBar layoutSubviews];
}];
}
}
答案 1 :(得分:0)
它反弹,因为持续时间少得多!!
增加持续时间..我认为它会更清晰地说明它的动画效果
K试试这个
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^ {
self.searchBar.frame = CGRectMake(0.f, 0.f, 280.f, 44.f);
}
completion:^(BOOL finished) {
}];
答案 2 :(得分:0)
我认为这对你有用,只看到下面的演示链接......
https://github.com/ipup/PPRevealSideViewController?_tmc=UFw1P_Ai9brJd4WEpSlPbNrXBWOvsYZ6gNPi_derQik
我希望这可以帮到你.. :)
...编辑
[UIView animateWithDuration:0.5
delay:4.0
options: UIViewAnimationOptionTransitionCrossDissolve
animations:nil
completion:^{
view.frame = CGRectMake(0.f, 0.f, 200.f, 100.f);}];
不确定,但尝试这个,并使用不同的动画,如“UIViewAnimationOptionTransitionCrossDissolve”等.... 希望这能帮到你......