Альфа UIView не обновляется после первого вызова, чтобы изменить его.(Swift 4.2) - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть UIView, на котором я хочу изменить альфа-канал с 0 на 0,5, когда пользователь открывает выдвижное меню.Когда пользователь касается затемненной области, альфа должна вернуться к 0. В настоящее время при нажатии кнопки меню значение альфа изменяется на 0,5, добавляя эффект затемнения к виду.Тем не менее, точка останова и оператор печати показывают, что при нажатии UIView строка для изменения альфа обратно на 0 выполняется, но пользовательский интерфейс все еще показывает альфа 0,5.Куда бы я ни посмотрел, код абсолютно одинаков, поэтому я не уверен, что делаю неправильно.

let dimView = UIView()
func setupMenuButton() {
    let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self, action: #selector(showMenu))
    navigationItem.rightBarButtonItem = menuButton
}

@objc func showMenu() {
    //TODO: present menu and dim background
    if let window = UIApplication.shared.keyWindow {
        let dimView = UIView()
        dimView.backgroundColor = UIColor.black
        dimView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismissDimView)))
        window.addSubview(dimView)
        dimView.frame = window.frame
        dimView.alpha = 0
        UIView.animate(withDuration: 0.5, animations: {
            dimView.alpha = 0.5
        })
    }
}

@objc func dismissDimView() {
    UIView.animate(withDuration: 0.5, animations: {
        self.dimView.alpha = 0
        print("dim view is not transparent")
    })
}

1 Ответ

0 голосов
/ 18 декабря 2018

dimView, созданный в showMenu, отличается от dimView, созданного в первой строке.Вы создаете новый dimView в showMenu.

Один из способов исправить это - не создавать новый dimView в showMenu, а использовать вместо него тот, который объявлен снаружи:

@objc func showMenu() {
    //TODO: present menu and dim background
    if let window = UIApplication.shared.keyWindow {
        // notice I deleted a line here
        dimView.backgroundColor = UIColor.black
        dimView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismissDimView)))
        window.addSubview(dimView)
        dimView.frame = window.frame
        dimView.alpha = 0
        UIView.animate(withDuration: 0.5, animations: {
            dimView.alpha = 0.5
        })
    }
}

@objc func dismissDimView() {
    UIView.animate(withDuration: 0.5, animations: {
        self.dimView.alpha = 0
        // here I remove the dimView from the window so that it can be added back in the next time showMenu is called
    }, completion: { [weak self] _ in self?.dimView.removeFromSuperView() })
}
...