我有几个UIView扩展,我从一个轻敲手势识别器调用。为什么背景颜色扩展必须在识别额外的点击之前完成动画? alpha扩展加上我用来动画视图位置的另一个工作正常 - 这意味着我可以尽可能快地点击它们并立即响应。
@IBAction func taps(sender: UITapGestureRecognizer) {
if !isAnimating {
currentLabel.fadeOut()
backgroundColor.fadeBackgroundOut()
isAnimating = true
} else {
currentLabel.fadeIn()
backgroundColor.fadeBackgroundIn(curBackground)
isAnimating = false
}
}
func fadeOut() {
UIView.animateWithDuration(0.5,
delay: 0.0,
options: UIViewAnimationOptions.CurveEaseOut,
animations: { self.alpha = 0.0 },
completion: nil)
}
func fadeBackgroundIn(aColor: UIColor) {
UIView.animateWithDuration(1.0,
delay: 0,
options: UIViewAnimationOptions.CurveEaseIn,
animations: { self.backgroundColor = aColor },
completion: nil)
}
答案 0 :(得分:2)
将您的扩展程序更新为:
func fadeOut() {
UIView.animateWithDuration(0.5,
delay: 0.0,
options: [UIViewAnimationOptions.CurveEaseIn , UIViewAnimationOptions.AllowUserInteraction],
animations: { self.alpha = 0.0 },
completion: nil)
}
func fadeBackgroundIn(aColor: UIColor) {
UIView.animateWithDuration(1.0,
delay: 0,
options: [UIViewAnimationOptions.CurveEaseIn , UIViewAnimationOptions.AllowUserInteraction],
animations: { self.backgroundColor = aColor },
completion: nil)
}
答案 1 :(得分:0)
这很容易,你必须明白,如果你改变了自我"即视为零,它停止触摸事件。
什么是好的解决方案是" self"即将背景颜色视为透明,而不是改变" self"即视图的alpha值,您的视图将无法显示,并且您将获得手势识别器事件。
替代方案可以是,在视图上添加透明按钮,处理按钮点击操作。