我正在对一个UIButtion进行圆角处理,这是可以的(self是一个uibutton子类):
self.layer.cornerRadius = self.frame.size.width/2;
self.layer.masksToBounds = YES;
self.clipsToBounds = YES;
但我也想尝试通过动画来缩小按钮的比例,然后再返回原始大小,就像这样:
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(0.0f, 0.0f);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(1.0f, 1.0f);
} completion:nil];
}];
缩小/恢复动画按预期进行。 但是,之后我失去了圆角,按钮变成了正方形。如何在保持圆形按钮的同时动画和更改变换比例?
我还尝试了以下方法。它在动画结束时将按钮恢复为圆形状态,但在动画开始时的最初几秒钟内,它会回到一个正方形,看起来相当糟糕:
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(0.0f, 0.0f);
self.layer.cornerRadius = 0.0f;
self.layer.masksToBounds = YES;
self.clipsToBounds = YES;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(1.0f, 1.0f);
self.layer.cornerRadius = self.frame.size.width/2;
self.layer.masksToBounds = YES;
self.clipsToBounds = YES;
} completion:nil];
}];
编辑:我需要动画代码和按钮圆角代码都在子类化的按钮内部完成。当触摸按钮时,它需要从按钮类内部自行完成(即不能在视图控制器中编写或调用按钮圆角或动画的代码)。
经过澄清后的解决方案: 我不知道为什么这样做有效,但以下建议的一部分似乎修复了问题。我将动画方法作为UIControlEventTouchDown事件的操作添加到自定义按钮上。我删除了控件事件操作,并在子类化的按钮类中从-(void)touchesBegan...调用动画方法,一切似乎都正常工作。不知道为什么会这样。如果有人知道为什么这样做有效,我很想要进一步的澄清/解释。再次感谢@Shan的帮助。