How to fade a UIVisualEffectView and/or UIBlurEffect in and out?

后端 未结 15 1060
故里飘歌
故里飘歌 2020-12-04 08:38

I want to fade a UIVisualEffectsView with a UIBlurEffect in and out:

var blurEffectView = UIVisualEffectView()
blurEffectView = UIVisualEffectView(effect: UI         


        
15条回答
  •  心在旅途
    2020-12-04 09:30

    Usually, I only want to animate a blur when I'm presenting a view controller over the screen and want to blur the presenting view controller. Here's an extension that adds blur() and unblur() to a view controller in order to facilitate that:

    extension UIViewController {
    
       func blur() {
           //   Blur out the current view
           let blurView = UIVisualEffectView(frame: self.view.frame)
           self.view.addSubview(blurView)
           UIView.animate(withDuration:0.25) {
               blurView.effect = UIBlurEffect(style: .light)
           }
       }
    
       func unblur() {
           for childView in view.subviews {
               guard let effectView = childView as? UIVisualEffectView else { continue }
               UIView.animate(withDuration: 0.25, animations: {
                    effectView.effect = nil
               }) {
                   didFinish in
                   effectView.removeFromSuperview()
               }
           }
       }
    }
    

    You can of course make this more robust by letting the user choose the effect style, modify the duration, call something when the animation is completed, tag the added visual effect view in blur() to ensure it's the only one removed when you unblur(), etc., but I haven't found the need to do these things so far, since this tends to be a "fire and forget" type of operation.

提交回复
热议问题