2

我想从右侧到左侧(相反)调整 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 属性: 在此处输入图像描述

还是没有运气...

4

3 回答 3

7

得到它与这个答案的提示一起工作:Can't animate 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];
        }];
    }

}
于 2012-08-20T13:39:38.950 回答
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) {

             }];

在这里查看选项

于 2012-08-20T12:29:45.660 回答
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”等....希望这对你有帮助....

于 2012-08-20T12:38:04.970 回答