我正在尝试为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];
为什么它根本没有动画?我假设它与我如何设置框架有关?
答案 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];