The Apple documentation (currently) states...
When using the UIVisualEffectView class, avoid alpha values that are less than 1.
and
Setting the alpha to less than 1 on the visual effect view or any of its superviews causes many effects to look incorrect or not show up at all.
I believe some important context is missing here...
I'd suggest that the intent is to avoid alpha values that are less than 1 for a persistent view. In my humble opinion this does not apply to the animation of a view.
My point - I'd suggest that alpha values less than 1 are acceptable for animations.
The terminal message states:
UIVisualEffectView is being asked to animate its opacity. This will cause the effect to appear broken until opacity returns to 1.
Reading this carefully, the effect will appear to be broken. My points on this being:
- the apparent break only really matters for a view that is persistent - not changing;
- a persistent / unchanging
UIVisualEffect
view with an alpha value less than 1 will not present as intended / designed by Apple; and
- the message in the terminal is not an error, just a warning.
To extend @jrturton's answer above that helped me solve my problem, I'd add...
To fade out the UIVisualEffect
use the following (Objective-C) code:
UIView.animateWithDuration(1.0, animations: {
// EITHER...
self.blurEffectView.effect = UIBlurEffect(nil)
// OR...
self.blurEffectView.alpha = 0
}, completion: { (finished: Bool) -> Void in
self.blurEffectView.removeFromSuperview()
} )
I successfully use both methods: setting the effect
property to nil
and setting the alpha
property to 0
.
Note that setting the effect
to nil
creates a "nice flash" (for want of a better description) at the end of the animation, while setting the alpha
to 0
creates a smooth transition.
(Let me know any syntax errors... I write in obj-c.)