2015-03-26 22 views
11

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

7

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

+0

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

+0

@kevinl Zdecydowanie nie poleciłbym tego - mógłbyś skończyć z dziwnymi wynikami i prawdopodobnie się to zmieni w przyszłości. – hundley