UIButton
上有mainStoryboard
。它有白色UIColor
和橙色突出显示的颜色。
我想在选择按钮后立即更改此按钮的颜色。
理想的结果
White(default) -> orange(highlighted) -> green(animated) -> white(default)
但是,使用以下代码,在颜色从橙色变为绿色之前,它会很快变为白色。
当前结果
White(default) -> orange(highlighted) -> White(default) -> green(animated) -> white(default)
如何直接将颜色从突出显示的橙色切换为绿色?
UIView.animate(withDuration:0, animations: { () -> Void in
cell.buttons[index].backgroundColor = UIColor.green
}) { (Bool) -> Void in
UIView.animate(withDuration: 0.5, animations: { () -> Void in
cell.buttons[index].backgroundColor = UIColor.green
}, completion: { (Bool) -> Void in
UIView.animate(withDuration: 0, animations: { () -> Void in
cell.buttons[index].backgroundColor = UIColor.white
}, completion:nil)
})
}
答案 0 :(得分:1)
您的动画代码看起来不错,但动画是两个状态之间的事务,需要时间(持续时间)。因此,尽量不要使用持续时间为0秒的动画,因为在这种情况下,动画是无用的。
您的问题似乎在按钮侦听器上出错。单击按钮后,您希望将颜色更改为橙色,即touchDown
。然后,您希望在释放按钮后立即进行颜色更改,即touchUpInside
请尝试此操作,将此代码添加到viewDidLoad
yourButton.addTarget(self, action:#selector(btnShowPasswordClickHoldDown), for: .touchDown)
yourButton.addTarget(self, action:#selector(btnShowPasswordClickRelease), for: .touchUpInside)
然后添加有效持续时间的动画
func btnShowPasswordClickHoldDown(){
UIView.animate(withDuration: 0.5, animations: { () -> Void in
self.yourButton.backgroundColor = UIColor.orange
}, completion:nil)
}
func btnShowPasswordClickRelease(){
UIView.animate(withDuration: 0.5, animations: { () -> Void in
self.yourButton.backgroundColor = UIColor.green
}, completion: { (Bool) -> Void in
UIView.animate(withDuration: 0.5, animations: { () -> Void in
self.yourButton.backgroundColor = UIColor.white
}, completion:nil)
})
}