在iOS上使用动画从右向左调整视图

时间:2012-08-20 12:11:19

标签: iphone ios animation uiview

我想从右侧到左侧(对面)调整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属性: enter image description here

仍然没有运气......

3 个答案:

答案 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) {

             }];

Chk here for Options

答案 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”等.... 希望这能帮到你......