Удалить VisualEffectView из вложенного представления

#ios #swift #subview #uivisualeffectview

#iOS #swift #вложенный просмотр #uivisualeffectview

Вопрос:

Я определил VisualEffectView с помощью логического условия. В этом случае при нажатии кнопки эта функция вызывается с active: true

 func addVisualEffectView(active: Bool) {
    let blurEffect = UIBlurEffect(style: .dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    if active {
        blurEffectView.alpha = 0.5
        blurEffectView.frame = self.view.frame
        self.view.insertSubview(blurEffectView, at: 2)
    } else {
        blurEffectView.removeFromSuperview()
    }
}
  

В другой кнопке эта функция вызывается снова с помощью active: false , предполагается, что она удаляет VisualEffectView вложенный просмотр с экрана, но этого не происходит. Не могли бы вы мне помочь и сказать, в чем проблема?

Ответ №1:

Если вы добавили его один раз, а затем снова вызываете свою функцию, она не удалит ранее добавленный вид, она просто не добавит новый UIVisualEffectView . Вы должны иметь возможность отслеживать созданное вами представление, продолжая использовать его tag свойство.

 func addVisualEffectView(active: Bool) {
    if active {
        let blurEffect = UIBlurEffect(style: .dark)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.alpha = 0.5
        blurEffectView.frame = self.view.frame
        blurEffectView.tag = 332211
        self.view.insertSubview(blurEffectView, at: 2)
    } else {
        self.view.viewWithTag(332211)?.removeFromSuperview()
    }
}