1

我有一个我调用的viewDidLoad函数MainViewcontroller

func showPopUp() {    

    self.popViewController = PopUpViewController(nibName: "PopUpViewController", bundle: nil)
    //self.popViewController.title = "This is a popup view"        

    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = view.bounds
    view.addSubview(blurEffectView)       

    self.popViewController.showInView(self.view, withImage: UIImage(named: "typpzDemo"), withMessage: "You just triggered a great popup window", animated: true)  
}

这带来了我PopupViewController的模糊MainViewController。在我的里面我PopupViewController有一个IBAction关闭这个视图控制器

@IBAction func closePopup(sender: AnyObject) {
    self.removeAnimate()
   // Need to Close down the blur effect here!
    }
}

当我关闭弹出窗口时,主视图控制器仍然模糊。如何从内部删除此模糊视图closePopup IBAction

4

2 回答 2

1

完成使用后,您必须删除blurEffectView它。在方法closePopUp方法里面试试这个:

blurEffectView.removeFromSuperview()

当然之前保存对这个变量的引用,例如以下方式:

class PopUpViewController {

   var blurEffectView : UIVisualEffectView!

    @IBAction func closePopup(sender: AnyObject) {
       self.removeAnimate()
       blurEffectView.removeFromSuperview()
    }
}

在此之前你必须这样做:

func showPopUp() {    

    self.popViewController = PopUpViewController(nibName: "PopUpViewController", bundle: nil)
    //self.popViewController.title = "This is a popup view"        

    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = view.bounds
    view.addSubview(blurEffectView)       

    // In this line you pass the reference to the Blur
    self.popViewController.blurEffectView = blurEffectView


    self.popViewController.showInView(self.view, withImage: UIImage(named: "typpzDemo"), withMessage: "You just triggered a great popup window", animated: true)  
}
于 2015-03-10T14:28:24.313 回答
1

您的问题似乎是如何在两个 ViewControllers 之间传递信息。尽管您可以采用多种方法来解决此问题,但我将向您展示如何使用带有 Foundation 的观察者模式来实现NotificationCenter。在你PopUpViewController的里面,添加一个通知closePopUp

    @IBAction func closePopup(sender: AnyObject) {
        self.removeAnimate()
        NSNotificationCenter.defaultCenter().postNotification(
            NSNotification(name: "popUpDidClose", object: self)
        )
    }

MainViewController启动. viewDidLoad_PopUpViewController

    override func viewDidLoad() {
        //...
        NSNotificationCenter.defaultCenter().addObserver(self,
                selector: Selector("clearBlurEffect:"),
                name: "popUpDidClose",
                object: nil
        )
    }

最后,将方法添加clearBlurEffectMainViewController中,这将对应于方法中的selector参数。编辑:您必须从主队列中触发通知。NSNotificationCenteraddObserver

    func clearBlurEffect(sender: NSNotification) {
        dispatch_async(dispatch_get_main_queue()) { [unowned self] in
            for subview in self.view.subviews as [UIView] {
                if let v = subview as? UIVisualEffectView {
                    v.removeFromSuperview()
                }
            }
        }
    }

UIVisualEffectView在这里,我们从您的主视图中排除任何's。

于 2015-03-10T14:31:39.103 回答