Jak mówi tytuł, czy istnieje sposób na animację promienia rozmycia UIVisualEffectView? Mam za sobą dynamiczne tło, więc dodatek ImageEffects nie może być użyty ... Jedyne, co mogę zrobić, o ile mi wiadomo, to ożywić krycie, ale iOS narzeka, że robienie tego łamie EffectView, więc zdecydowanie wydaje się złym pomysłem ... Każda pomoc byłaby mile widziana.Animacja UIVisualEffectView Rozmycie promieniowe?
Odpowiedz
Odpowiedź brzmi: tak. Oto przykład dla animacji z żadnym Rozmycie -> Rozmycie:
// When creating your view...
let blurView = UIVisualEffectView()
// Later, when you want to animate...
UIView.animateWithDuration(1.0) {() -> Void in
blurView.effect = UIBlurEffect(style: .Dark)
}
To będzie animować promień rozmycia od zera (całkowicie przezroczyste, a raczej - brak efektu rozmycia w ogóle) do promienia domyślnego (całkowicie niewyraźne) na czas trwania jednej sekundy. I zrobić odwrotnego animację:
UIView.animateWithDuration(1.0) {() -> Void in
blurView.effect = nil
}
Powstałe animacje przekształcenia promień rozmycia płynnie, choć jesteś rzeczywiście dodawanie/usuwanie efektu rozmycia całkowicie - UIKit po prostu wie, co zrobić za kulisami.
Należy zauważyć, że nie zawsze było to możliwe: Do niedawna (nie wiadomo kiedy), UIVisualEffectView musiał zostać zainicjowany za pomocą UIVisualEffect, a właściwość effect
była tylko do odczytu. Teraz, effect
jest zarówno opcjonalna, jak i do odczytu/zapisu (choć dokumentacja nie jest aktualizowana ...), a UIVisualEffectView zawiera pusty inicjator, który umożliwia nam wykonywanie tych animacji.
Jedynym ograniczeniem jest to, że nie można ręcznie przypisać niestandardowego promienia rozmycia do UIVisualEffectView - można animować tylko pomiędzy "brak rozmycia" i "całkowite rozmycie".
EDIT: W przypadku, ktoś jest zainteresowany, I utworzeniu podklasy UIVisualEffectView
który daje pełną kontrolę nad promieniem rozmycia. Ograniczeniem jest to, że używa prywatnego interfejsu API UIKit
, więc prawdopodobnie nie powinieneś przesyłać aplikacji do recenzji za jego pomocą. Jednak nadal jest to interesujące i użyteczne w przypadku prototypów lub aplikacji wewnętrznych: https://github.com/collinhundley/APCustomBlurView
co zrobić, jeśli zatrzymasz animację, aby uzyskać miejsce pomiędzy brakiem rozmycia a całkowitym rozmyciem? na przykład blurView.layer.timeOffset = 0,5 – kevinl
@kevinl Zdecydowanie nie poleciłbym tego - mógłbyś skończyć z dziwnymi wynikami i prawdopodobnie się to zmieni w przyszłości. – hundley