ios - UIButton不在两个图像之间切换Swift 4.2
问题描述
我想在我的应用程序中添加声音。我添加了一个带有两个图像的 UIButton,soundON 和 soundOFF。当我第一次在应用程序中调用声音设置时,它们会随着每张图像而正常切换。但是,当我第二次及以后返回声音设置时,就像显示 soundOn 图像时 soundOff 图像并没有消失一样。奇怪的是代码是如此简短和简单。
func soundButton() {
sounds = UIButton(frame : CGRect(x: 65, y: 70, width: 40, height:40))
sounds.setImage(UIImage(named : "soundON"), for : .normal)
sounds.setImage(UIImage(named : "soundOFF"), for : .selected)
sounds.showsTouchWhenHighlighted = true
sounds.addTarget(self, action: #selector(soundButtonTapped), for: .touchUpInside)
self.soundView.addSubview(sounds)
}
@objc func soundButtonTapped(_ sender: Any) {
sounds.isSelected.toggle()
isSoundOn.toggle()
}
我添加了一个视频来显示这个问题,因为这将节省大量的打字时间。
http://www.reeflifeapps.com/soundError.mov
任何帮助是极大的赞赏。
更新:我在拼图启动时隐藏了 UIView 上的按钮。当用户按下“声音设置”图标时,声音设置 UIView 被取消隐藏。我有这个功能上的按钮来取消隐藏声音设置。我将其移至 viewDidLoad() 并对其进行了修复。
解决方案
我建议您定义一个布尔变量来保持按钮的当前状态。然后,您应该根据变量的当前状态设置按钮的当前图像。
var isSoundOn = false
@objc func soundButtonTapped(_ sender: Any) {
isSoundOn.toggle()
if isSoundOn {
// your logic when sound on (set button selected image, action etc)
} else {
// logic when sound off (set button not selected image, action etc)
}
}
如果您仍想soundButton.isSelected
用作布尔变量,请不要为不同的状态定义图像,soundButton.setImage(yourImage, for: .selected)
并按soundButton.setImage(yourImage, for: .normal)
如下方式定义它们:
soundButton.setImage(soundButton.isSelected ? soundOnImage : soundOffImage, for: .normal)
可以使用上述两种方法之一。
更新:
正如 Lloyd Kaijzer 所说,isSoundOn = !isSoundOn
更新为isSoundOn.toggle()
推荐阅读
- python - 卷曲工作,但 Python 请求/会话给出 404 错误
- java - 在 java/scala 中生成 ecdsa 32 字节私钥
- r - write.xlsx (openxlsx) 的编码问题
- java - JAVA Can we overlap objects between NORTH and SOUTH in JPanel with BorderLayout?
- flutter - Flutter:背景调整大小和表单输入问题
- ios - 从父视图控制器调用子视图实例的函数
- javascript - Subject.pipe(last()) 与 ReplaySubject(1)?
- javascript - 什么时候开始使用 VueX 商店?
- c# - 使用可变参数过滤通用选择
- c++ - 递归 pCall 函数