仅从底部垂直缩放UIButton

时间:2010-12-10 06:41:51

标签: iphone ipad core-animation

我正在尝试为UIButton的缩放设置动画,但是很难让它以我想要的方式设置动画。

我有一个带有可伸缩UIImage的UIButton。我希望它的高度可以扩展到一定的大小,并赋予它“增长”的效果。我使用下面的代码,但它激活了从顶部和底部生长的UIButton,而不仅仅是底部。请参阅此处的代码:

myButton.transform = CGAffineTransformMakeScale(1,0.5);
myButton.alpha = 0.6f;  
[UIView beginAnimations:@"myButton" context:nil];
[UIView setAnimationDuration:0.5];
myButton.transform = CGAffineTransformMakeScale(1,1);
myButton.alpha = 1.0f;
[UIView commitAnimations];

很难解释,基本上我希望UIButton只从一侧(底部)生长,而不是通过扩展两侧来增长。有什么建议吗?


更新

我也尝试过改变按钮的框架,这也不起作用。这一次,根本没有看到动画。这是我的代码:

CGRect  buttonRect = CGRectMake(0, 0, 150, 22);
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.frame = buttonRect;

myButton.alpha = 0.6f;
[self.view addSubview:myButton];

[UIView beginAnimations:@"myButton" context:nil];
[UIView setAnimationDuration:0.3];  
CGRect buttonRect2 = CGRectMake(0, 0, 150, 52);
myButton.frame = buttonRect2;
myButton.alpha = 1.0f;
[UIView commitAnimations];

为什么它根本没有动画?我假设它与我如何设置框架有关?

3 个答案:

答案 0 :(得分:2)

在调用setFrame:方法之前,您不会看到任何动画。

CGRect  buttonRect = CGRectMake(0, 0, 150, 22);
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.frame = buttonRect;

myButton.alpha = 0.6f;
[self.view addSubview:myButton];

[UIView beginAnimations:@"myButton" context:nil];
[UIView setAnimationDuration:0.3];  
CGRect buttonRect2 = CGRectMake(0, 0, 150, 52);
[UIView commitAnimations];

[UIView beginAnimations:@"myButton" context:nil];
[UIView setAnimationDuration:0.3];
 myButton.alpha = 1.0f;
[myButton setFrame: buttonRect2];
[UIView commitAnimations];

答案 1 :(得分:1)

最简单的方法可能是对frame属性进行动画处理,并增加其宽度和高度,而不是尝试计算基于中心点的变换的复杂性。如果您真的需要在此视图上进行变换,则可以在动画完成后始终透明地更新它。

答案 2 :(得分:0)

我已经回答了我自己的问题。你需要调用layoutSubviews。 见这里:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.frame = CGRectMake(0, 0, 150, 22);

myButton.alpha = 0.6f;
[self.view addSubview:myButton];
[myButton layoutSubviews];

[UIView beginAnimations:@"myButton" context:nil];
[UIView setAnimationDuration:0.3];  
myButton.alpha = 1.0f;
myButton.frame = CGRectMake(0, 0, 150, 52);
[myButton layoutSubviews];
[UIView commitAnimations];