UIButton上的UIControl.State.Highlighted图像仅在第一次触摸事件后起作用

时间:2019-01-23 11:26:06

标签: ios swift uibutton

我有一组按钮,希望通过触摸时淡入淡出不同的高亮图像。下面的技术工作正常,但仅在同一按钮上发生第二次触摸事件之后才有效。第一次触摸会在整个按钮上产生标准的“褪色深灰色”。从那时起,将来的触摸就可以通过高亮显示的图片正确淡入淡出。

我只在模拟器中测试过,这是他发出的吗?如果没有,如何在每次触摸时产生正确的突出显示状态?谢谢!

isMatch

2 个答案:

答案 0 :(得分:2)

最初在设置UIButton属性时或在viewDidLoad()中通过编写以下代码来设置按钮的突出显示图像。

yourButton.setImage(UIImage(named: "My Image.png"), for: UIControl.State.highlighted)

无法使用您的代码的原因

按钮操作@IBAction func someButton(_ sender: UIButton)始终仅在用户手指松开时调用,因此,此时UIButton首次没有具有突出显示状态的图像。稍后,通过动画设置图像,从而使其动画效果完美。

修改

您可以通过创建如下所示的单独函数,通过Firebase调用或其他事件操作来转换UIButton。使用UIButton的{​​{1}}来访问按钮。

outlet

因此,您可以随时随地调用@IBOutlet weak var someButton: UIButton! func buttonTransition() { UIView.transition(with: sender, duration: 0.3, options: .transitionCrossDissolve, animations: { someButton.setImage(UIImage(named: "My Image.png"), for: UIControl.State.highlighted) }, completion: nil) } 函数。

答案 1 :(得分:0)

它在第二次单击时有效,因为您已在按钮单击动作中编写了转换代码。只需在viewDidLoad或viewWillApear中编写该代码,它将在第一次单击之前起作用,并将在按钮上设置过渡。在viewDidLoad中编写如下内容:

 override func viewDidLoad() {
    super.viewDidLoad()
    UIView.transition(with: button, duration: 0.3, options: .transitionCrossDissolve, animations: {
        self.button.setImage(UIImage(named: "image.png"), for: UIControl.State.highlighted)
    }, completion: nil)
}

此处的按钮是在情节提要中创建的按钮的出口变量。