我的动画出错了(当我尝试更改按钮的大小时)

时间:2014-01-17 16:26:32

标签: ios ipad animation button

我有一些动画代码可以将9个可用按钮移动到屏幕中央:

[UIView animateWithDuration:4
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^(void)
 {
     switch (correctNum) {
         case 1:
             [number1 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 2:
             [number2 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 3:
             [number3 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 4:
             [number4 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 5:
             [number5 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 6:
             [number6 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 7:
             [number7 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 8:
             [number8 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         case 9:
             [number9 setFrame:CGRectMake(482, 354, 60, 60)];
             break;
         default:
             break;
     }
 }
                 completion:^(BOOL finished)
 {
 }];

工作正常,正确的按钮可以平滑地移动到屏幕中央。但我想这样做,以便按钮增长到中心的两倍大小,所以我将代码更改为:

[UIView animateWithDuration:4
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^(void)
 {
     switch (correctNum) {
         case 1:
             [number1 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 2:
             [number2 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 3:
             [number3 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 4:
             [number4 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 5:
             [number5 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 6:
             [number6 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 7:
             [number7 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 8:
             [number8 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         case 9:
             [number9 setFrame:CGRectMake(482, 354, 120, 120)];
             break;
         default:
             break;
     }
 }
                 completion:^(BOOL finished)
 {
 }];

现在,当代码触发时,按下的按钮跳转到屏幕中心(没有平滑的动画)然后平滑地移回到原始位置 - 实际上与上面的代码相反。该按钮也不会改变大小。

知道为什么会这样做吗?或者失败了,建议如何让它做我想做的事情?

2 个答案:

答案 0 :(得分:0)

不要改变框架的宽度和高度,而是保留第一个示例并更改按钮的变换:

numberX.transform = CGAffineTransformMakeScale(2,2);

我无法解释为什么你的第二个例子不能正常工作,但是如果第一个例子用于将按钮移动到屏幕的中心,那么保留它并使用按钮的transform属性来放大它。

答案 1 :(得分:0)

首先,您使用的是自动布局吗?如果是,则此代码将无法正常运行。使用AutoLayout,您需要更改约束而不是尝试移动视图。

现在,关于你的代码:

我建议您更改视图的中心属性而不是帧原点。即使已应用变换,移动中心仍然有效。

然后,要更改大小,请更改边界大小(将使按钮以较大的大小重新绘制自身)。您可以像其他人建议的那样更改按钮的变换,但这会缩放像素而不是重新绘制,因此它看起来会变得模糊(或模糊,取决于)。如果你改变边界应该看起来更好。