1

我想将右侧搜索栏向左延长 20 像素,并通过动画将左侧搜索栏向右缩短 20 像素。我怎样才能做到这一点?

CGRect leftFrame = self.leftSearchBar.frame;
    //leftFrame.origin.x = leftFrame.origin.x - 20;
    leftFrame.size.width = leftFrame.size.width - 40;

    CGRect rightFrame = self.rightSearchBar.frame;
    rightFrame.origin.x = rightFrame.origin.x - 40;
    rightFrame.size.width = rightFrame.size.width + 40;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:0.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    self.leftSearchBar.frame = leftFrame;
    self.rightSearchBar.frame = rightFrame;

    [UIView commitAnimations];

它不起作用。它首先在没有动画的情况下调整视图的大小,然后使用动画移动正确的视图。

4

1 回答 1

1

假设您没有更改锚点或类似的东西,只需扩展宽度即可使其向右拉伸。将其包装在 UIView 动画块中,它应该根据问题中的规范进行动画处理,如下所示:

UISearchBar* searchbar = ...; // However you've created your UISearchBar, we'll refer to it as 'searchbar'

CGRect searchFrame = searchbar.frame;
[UIView animateWithDuration:0.8 
                      delay:0.0
                    options:UIViewAnimationOptionBeginFromCurrentState
                 animations:^{
                     searchFrame.size.width += 30;
                     searchbar.frame = searchFrame;
                 }
                 completion:nil];

您需要确保+= 30不会多次调用 ,否则每次调用时您将扩展 30 个点。如果您事先知道大小,则可以简单地将其替换为,如果您= size + 30多次调用动画,这是一个更安全的选择。

于 2012-11-27T22:15:04.207 回答