【发布时间】:2014-01-20 11:40:55
【问题描述】:
我正在四舍五入一个 UIBUtton,这很好(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 的帮助
【问题讨论】:
标签: ios ios7 uibutton calayer cgaffinetransformscale