Подслой с эффектом размытия не исчезает с XIB - PullRequest
0 голосов
/ 06 мая 2018

Я реализую эффект размытия на виде (с Swift 4.1, Xcode 9.3) с помощью следующего кода:

myXib - загружает представление пера и добавляет подпредставление размытия

func setup() {
    // load xib view
    Bundle.main.loadNibNamed("myXib", owner: self, options: nil)
    self.view.frame = bounds
    self.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.addSubview(self.view)

    // create blur effect
    let blurEffect = UIBlurEffect(style: .light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = blurView.bounds
    blurView.translatesAutoresizingMaskIntoConstraints = false
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    blurView.insertSubview(blurEffectView, at: 0)
    isBlurShowing = true
}

Я использую простую кнопку переключения, которая вызывает функции show () или hide ().

func hide() {
    blurView.isHidden = true
    blurView.alpha = 0
    isBlurShowing = false
}

func show() {
    blurView.isHidden = false
    blurView.alpha = 1
    isBlurShowing = true
}

Пример myXib выглядит следующим образом:

enter image description here

где серая область - это blurView (обычно для Clear Color обычно устанавливается только серый здесь для наглядности.)

Для вида (оранжевый) под blurView, но внутри функция Xib скрыть () работает правильно, но для вида (синий) под вид Xib эффект размытия остается .

С размытием (.isHidden = false, .alpha = 1)

blur on

без размытия ((.isHidden = true, .alpha = 0)

enter image description here

Эффект размытия меньше при выключении, но он все еще присутствует. Что я делаю не так?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

Хорошо, разобрался.

Проблема в том, что я создавал второй слой размытия в 0, потому что я вызывал его также в функции init, имея:

override init (frame : CGRect) {
    super.init(frame: frame)
    setup()
}

required init? (coder aDecoder : NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

Как только я удалил их, код функционировал правильно.

...