UIButton не переключается между двумя изображениями Swift 4.2 - PullRequest
0 голосов
/ 21 марта 2019

Я хочу добавить звуки в свое приложение.Я добавил UIButton с двумя изображениями, soundON и soundOFF.Когда я в первый раз вызываю настройки звука в приложении, они прекрасно переключаются с каждым изображением.Однако, когда я возвращаюсь к настройкам звука во второй и последующий раз, создается впечатление, что изображения soundOff не исчезают при отображении изображения soundOn.Как ни странно, код такой короткий и простой.

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 (), и он исправил это.

1 Ответ

0 голосов
/ 21 марта 2019

Я предлагаю вам определить логическую переменную, которая хранит текущее состояние вашей кнопки. Затем вы должны установить текущее изображение кнопки в соответствии с текущим состоянием переменной.

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)

Можно использовать один из этих двух подходов, приведенных выше.

UPDATE

Как заявил Ллойд Кайзер, isSoundOn = !isSoundOn обновлен как isSoundOn.toggle()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...