Подсветка UIButton размытым фоном приводит к потере прозрачности - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть кнопка UIB, на которой я получаю размытый и затемненный фон. Однако когда я выделяю его (нажимаю, но не отпускаю кнопку), он теряет прозрачность из-за добавления непрозрачных слоев.

Вот видео об этом; проблема начинается через несколько секунд: https://imgur.com/a/B9w52nZ

Мой класс кнопок выглядит следующим образом:

override func layoutSubviews() {
    super.layoutSubviews()
    let blur = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
    blur.frame = self.bounds
     blur.isUserInteractionEnabled = false
     self.insertSubview(blur, at: 0)
}

Сборка с: Swift 4, iOS 12 beta

В чем здесь проблема и как лучше ее исправить?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Как вы упоминаете, layoutSubviews вызывается несколько раз.

Поскольку ваша кнопка создана в раскадровке, вы можете переместить код, чтобы добавить размытие к

func awakeFromNib()

этот метод вызывается только один раз для объекта, созданного из файла xib или раскадровки,

Вы должны макетировать UIVisualEffectView, используя автопоставку (добавляя ограничения макета), или настраивать его фрейм только в layoutSubviews()

0 голосов
/ 09 сентября 2018

layoutSubviews () вызывается несколько раз, в том числе когда кнопка подсвечивается. Следовательно, размытие добавляется каждый раз. Я добавил логику, чтобы предотвратить это, исправляя проблему. Новый код:

var isBlurred = false

override func layoutSubviews() {
    super.layoutSubviews()
    if !isBlurred {
        let blur = UIVisualEffectView(effect: UIBlurEffect(style:
            .regular))
        blur.frame = self.bounds
        blur.isUserInteractionEnabled = false
        self.insertSubview(blur, at: 0)
        isBlurred = true
    }
}

Это немного быстро и грязно, но это решает проблему.

...