2015-03-26 2 views
11

Comme le dit le titre, existe-t-il un moyen d'animer le rayon de flou d'UIVisualEffectView? J'ai un arrière-plan dynamique derrière la vue, donc l'addition d'ImageEffects ne peut pas être utilisée ... La seule chose qui peut faire ça pour autant que je sache, c'est d'animer l'opacité mais iOS se plaint de faire ça semble être une mauvaise idée ... Toute aide serait volontiers appréciée.Animation du rayon de flou UIVisualEffectView?

Répondre

7

La réponse est oui. Voici un exemple pour l'animation d'aucun flou -> flou:

// When creating your view... 
let blurView = UIVisualEffectView() 
// Later, when you want to animate... 
UIView.animateWithDuration(1.0) {() -> Void in 
    blurView.effect = UIBlurEffect(style: .Dark) 
} 

Cela animer le rayon de flou de zéro (totalement transparent, ou plutôt - aucun effet de flou du tout) au rayon par défaut (complètement floue) sur la durée d'une seconde. Et pour l'animation inverse:

UIView.animateWithDuration(1.0) {() -> Void in 
    blurView.effect = nil 
} 

Les animations résultant transform le rayon de flou en douceur, même si vous êtes en train de l'ajout/suppression de l'effet de flou entièrement - UIKit sait exactement quoi faire dans les coulisses.

Notez que cela n'a pas toujours été possible: Jusqu'à récemment (pas sûr quand), un UIVisualEffectView devait être initialisé avec un UIVisualEffect, et la propriété effect était en lecture seule. Maintenant, effect est à la fois optionnel et en lecture/écriture (bien que la documentation ne soit pas mise à jour ...), et UIVisualEffectView inclut un initialiseur vide, nous permettant d'effectuer ces animations. La seule restriction est que vous ne pouvez pas assigner manuellement un rayon de flou personnalisé à un UIVisualEffectView - vous pouvez seulement animer entre 'sans flou' et 'complètement flou'.

EDIT: Si quelqu'un est intéressé, j'ai créé une sous-classe de UIVisualEffectView qui vous donne un contrôle total sur le rayon de flou. Le bémol est qu'il utilise une API privée UIKit, donc vous ne devriez probablement pas soumettre des applications pour examen en l'utilisant. Cependant, il est toujours intéressant et utile pour les prototypes ou les applications internes: https://github.com/collinhundley/APCustomBlurView

+0

et si vous géliez l'animation de sorte que vous pouvez obtenir quelque part entre aucun flou et entièrement flou? par exemple. blurView.layer.timeOffset = 0.5 – kevinl

+0

@kevinl Je ne recommanderais certainement pas cela - vous pourriez vous retrouver avec des résultats étranges et il est susceptible de se casser dans le futur. – hundley