Come dice il titolo, c'è un modo per animare il raggio di sfocatura di UIVisualEffectView? Ho uno sfondo dinamico dietro la vista, quindi l'aggiunta ImageEffects non può essere usata ... L'unica cosa che può farlo per quanto ne so è animare l'opacità ma iOS si lamenta dicendo che facendo ciò si interrompe EffectView così sicuramente sembra una cattiva idea ... Qualsiasi aiuto sarebbe gradito.Animazione di UIVisualEffectView Blur Radius?
risposta
La risposta è sì. Ecco un esempio per l'animazione da nessuna sfocatura -> sfocatura:
// When creating your view...
let blurView = UIVisualEffectView()
// Later, when you want to animate...
UIView.animateWithDuration(1.0) {() -> Void in
blurView.effect = UIBlurEffect(style: .Dark)
}
Questo animerà il raggio di sfocatura da zero (totalmente trasparente, o meglio - nessun effetto di sfocatura affatto) per il raggio di default (completamente offuscata) sulla durata di un secondo. E per fare l'animazione inverso:
UIView.animateWithDuration(1.0) {() -> Void in
blurView.effect = nil
}
Le animazioni risultanti trasformare il raggio di sfocatura senza intoppi, anche se si sta effettivamente aggiungere/rimuovere l'effetto di sfocatura del tutto - UIKit sa proprio cosa fare dietro le quinte.
Si noti che questo non era sempre possibile: Fino a poco tempo fa (non è sicuro quando), un UIVisualEffectView doveva essere inizializzato con un UIVisualEffect e la proprietà effect
era di sola lettura. Ora, effect
è sia opzionale che di lettura/scrittura (sebbene la documentazione non sia aggiornata ...) e UIVisualEffectView include un inizializzatore vuoto che ci consente di eseguire queste animazioni.
L'unica limitazione è che non è possibile assegnare manualmente un raggio di sfocatura personalizzato a un UIVisualEffectView - è possibile animare solo tra "nessuna sfocatura" e "completamente sfocato".
MODIFICA: Nel caso in cui qualcuno sia interessato, ho creato una sottoclasse di UIVisualEffectView
che offre il pieno controllo del raggio di sfocatura. L'avvertenza è che utilizza un'API privata UIKit
, quindi probabilmente non dovresti inviare app per la revisione che la utilizzano. Tuttavia, è ancora interessante e utile per i prototipi o le applicazioni interne:
cosa succede se si blocca l'animazione in modo da poter ottenere un punto intermedio tra nessuna sfocatura e completamente sfocato? per esempio. blurView.layer.timeOffset = 0.5 – kevinl
@kevinl Sicuramente non lo consiglierei - potresti finire con qualche risultato strano ed è probabile che si rompa in futuro. – hundley