Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何通过动画在x方向延长UISearchBar?_Ios_Core Animation_Uisearchbar - Fatal编程技术网

Ios 如何通过动画在x方向延长UISearchBar?

Ios 如何通过动画在x方向延长UISearchBar?,ios,core-animation,uisearchbar,Ios,Core Animation,Uisearchbar,我想把右搜索栏向左拉长20px,用动画把左搜索栏向右拉短20px。我该怎么做 CGRect leftFrame = self.leftSearchBar.frame; //leftFrame.origin.x = leftFrame.origin.x - 20; leftFrame.size.width = leftFrame.size.width - 40; CGRect rightFrame = self.rightSearchBar.frame; righ

我想把右搜索栏向左拉长20px,用动画把左搜索栏向右拉短20px。我该怎么做

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];

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

假设您没有更改定位点或类似的内容,只需扩展宽度即可使其向右拉伸。将其包装在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
替换它,这是一个更安全的赌注,以防您多次调用动画。

假设您没有更改锚定点或类似的内容,只需扩展宽度即可使其向右拉伸。将其包装在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
替换它,这是一种更安全的选择,以防您多次调用动画。

“它不起作用。它首先在没有动画的情况下调整视图的大小,然后在没有动画的情况下移动右侧视图。”您是否在其他地方更改帧?这可能会干扰动画。否。只是在代码中进行了更改。“它不起作用。它首先在没有动画的情况下调整视图的大小,然后使用动画移动右侧视图。”您是否在其他地方更改帧?这可能会干扰动画。否。你不能直接操作任何框架属性,所以searchbar.frame.size.width+=30;不行。最好将其分配给一个变量:CGRect searchFrame=searchbar.frame;searchFrame.size.width+=30;[搜索栏设置框:搜索框];我在这里得到错误
searchFrame.size.width+=30
表示只读变量不可分配?@icodes不直接在搜索栏中修改帧,您需要将其值复制到局部变量中,修改该变量,然后将其分配给搜索栏的frame属性。示例代码的第3行显示了这一点,您不能直接操作任何框架属性,因此searchbar.frame.size.width+=30;不行。最好将其分配给一个变量:CGRect searchFrame=searchbar.frame;searchFrame.size.width+=30;[搜索栏设置框:搜索框];我在这里得到错误
searchFrame.size.width+=30
表示只读变量不可分配?@icodes不直接在搜索栏中修改帧,您需要将其值复制到局部变量中,修改该变量,然后将其分配给搜索栏的frame属性。示例代码的第3行显示了这一点。