UIButton 上的 UIControl.State.Highlighted 图像仅在第一次触摸事件后有效
Posted
技术标签:
【中文标题】UIButton 上的 UIControl.State.Highlighted 图像仅在第一次触摸事件后有效【英文标题】:UIControl.State.Highlighted image on UIButton only works after first touch event 【发布时间】:2019-01-23 11:26:05 【问题描述】:我有一组按钮,我希望在触摸时通过不同的突出显示图像交叉淡入淡出。下面的技术工作正常,但仅在同一按钮上的第二次触摸事件之后。第一次触摸会在整个按钮上产生标准的“褪色深灰色”;从那时起,future 会通过突出显示的图片正确地交叉淡入淡出。
我只在模拟器中测试过,是他的问题吗?如果没有,我如何在每次触摸时产生正确的突出显示状态?谢谢!
@IBOutlet weak var someButton: UIButton!
@IBAction func someButton(_ sender: UIButton)
UIView.transition(with: sender, duration: 0.3, options: .transitionCrossDissolve, animations:
sender.setImage(UIImage(named: "My Image.png"), for: UIControl.State.highlighted)
, completion: nil)
//...other functions
【问题讨论】:
【参考方案1】:在设置UIButton
属性时或在viewDidLoad()
中通过编写下面的代码来设置按钮的突出显示图像。
yourButton.setImage(UIImage(named: "My Image.png"), for: UIControl.State.highlighted)
您的代码无法运行的原因
按钮操作@IBAction func someButton(_ sender: UIButton)
总是只在用户手指松开时调用,所以此时 UIButton 首次没有高亮状态的图像。后来,图像通过动画设置,因此动画完美。
编辑
您可以通过创建如下所示的单独函数来使用 firebase 调用或其他一些事件操作来转换 UIButton
。使用UIButton
的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)
所以,您可以从任何地方调用buttonTransition()
函数。
【讨论】:
有没有办法从按钮本身外部调用它?我希望能够从按钮按下或 Firebase 调用运行转换。当我尝试任何其他with:
项目时,我不断收到Cannot convert value of type '/**Some type*/' to expected argument type 'UIView'
。
我已经编辑了答案@moosgrn。请查看 Edit 以澄清您的疑问。如果还有任何问题,请随时在此处发表评论.. !! ?【参考方案2】:
它正在处理第二次点击,因为您已经在按钮点击动作中编写了转换代码。只需在 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)
这里的button是storyboard中创建的按钮的outlet变量。
【讨论】:
以上是关于UIButton 上的 UIControl.State.Highlighted 图像仅在第一次触摸事件后有效的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UIButton 上的 UIImageView 会在触摸时重新出现?
UIButton 上的 CGAffineTransformMakeTranslation 问题
避免 UIPickerView ios 上的 UIButton 覆盖