直接从突出显示的颜色切换到另一种颜色

时间:2017-06-26 12:47:44

标签: ios swift

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)
        })
    }

1 个答案:

答案 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)
    })
}