Удалить размытие фона после всплывающего окна - PullRequest
1 голос
/ 13 марта 2019

У меня есть два контроллера вида: MainViewController и PopupViewController. Из основного контроллера у меня есть просмотр изображений с помощью распознавателя жестов длинным нажатием, при длительном нажатии я вызываю свой всплывающий контроллер просмотра и использую размытие на основном контроллере:

var blurEffectView: UIVisualEffectView!

@IBAction func addGamePopup(_ sender: UILongPressGestureRecognizer) {

    if (sender.state == UIGestureRecognizer.State.began){

        self.view.addSubview(blurEffectView)
        UIView.animate(withDuration: 0.5, animations: {
            self.blurEffectView.alpha = 1;
        });

        let popupView = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AddGamePopup")
        self.present(popupView, animated: true, completion: nil)


    }


}
override func viewDidLoad() {
    super.viewDidLoad()
    self.blurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffect.Style.dark))
    self.blurEffectView.frame = self.view.bounds
    self.blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.blurEffectView.alpha = 0;

    // Do any additional setup after loading the view, typically from a nib.
}

Затем я делаю свой тонкий в всплывающем контроллере и звоню

self.dismiss(animated: true, completion: nil)

Но теперь мне нужно удалить мой blurEffectView с основного экрана. Как то так, но где мне это делать? Я не могу получить доступ к этому представлению из моего всплывающего контроллера, и я не знаю, как вызвать какое-либо событие, когда всплывающее окно закрыто

blurEffectView.removeFromSuperview()

Ответы [ 2 ]

1 голос
/ 13 марта 2019

У меня такая же ситуация, как и у вас, и я сделал это, используя протоколы для передачи данных обратно первому ViewController (в вашем случае, MainViewController), чтобы скрыть размытость.

Вот как я это сделал:

Это первый ViewController (MainViewController в вашем случае). Вы создаете и внедряете протокол и соответствуете его методам.

import UIKit

//here you can name your protocol and the function whatever you want and set the values you want to pass back, in our case a boolean
protocol esconderBlurProtocol {
    func isEsconder(value: Bool)
}

//you have to extend the controller to your protocol and conform its methods, in this case the function isEsconder, and inside it you do whatever you want.
//In our case hide the blur if the value we are receiving is true
class PalestrantesVC: UIViewController,esconderBlurProtocol {

    func isEsconder(value: Bool) {
        if(value){
            blur.isHidden = true
        }
    }
}

Теперь для вашего второго ViewController это довольно просто. Просто создайте переменную вашего типа протокола (в моем случае esconderBlurProtocol).

class DetalhePalestranteVC: UIViewController {

     var delegate: esconderBlurProtocol?

И используйте его, вызывая его функцию, когда захотите (в нашем случае, когда мы закрываем этот ViewController), отправляя значение True обратно в наш предыдущий ViewController:

override func viewWillDisappear(_ animated: Bool) {
     delegate?.isEsconder(value: true)
}

И чтобы закончить, вам нужно установить экземпляр вашего протокола на ваш первый ViewController, когда вы открываете второй ViewController, например так:

let viewController = (self.storyboard?.instantiateViewController(withIdentifier: "DetalhePalestranteVC")) as! DetalhePalestranteVC
viewController.modalPresentationStyle = .overFullScreen
viewController.delegate = self
self.present(viewController, animated: true, completion: nil)

Вот и все. Извините, если это не так, как английский, не мой основной язык.

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

Вызов blurEffectView?.removeFromSuperview внутри viewWillDisappear() или viewDidDisappear из viewController всплывающего окна

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