2016-08-31 31 views
6

Obecnie używam UIVisualEffectView do zastosowania rozmycia obrazu.Jak można zmieniać rozmycie UIVisualEffectView podczas przeciągania w systemie iOS?

Mam UIScrollView. Podczas rozwijania scrollView w mojej metodzie "scrollViewDidScroll" zmieniam alfa z UIVisualEffectView. Obecne zachowanie tego jest takie, że promień rozmycia zmienia się płynnie podczas przeciągania w widoku.

Problem polega oczywiście na tym, że nie powinienem tego robić. Otrzymuję ostrzeżenia o zmianie wartości alfa w UIVisualEffectView.

Widziałem mówią zrobić płynne przejście rozmycia za pomocą animacji, jak ten tutaj: How to fade a UIVisualEffectView and/or UIBlurEffect in and out?

Ja jednak nie widziałem niczego, co pozwala mi robić to w czasie, powiedzmy do ogólnoeuropejskich gest czy coś. Mam na myśli, jeśli ustawię animację o określonej w czasie ilości, wszystko dobrze. Ale robiąc to podczas przeciągania?

Odpowiedz

7
Istnieje

to sposób :)

Jak już zauważyliśmy, można animować z efektem nil do skutku jak UIBlurEffectStyleDark więc jeśli dodamy animację, a następnie wstrzymać animacji warstwa może kontrolować postęp efekt poprzez dostosowanie warstwy timeOffset!

- (void) setupBlur { 
    // Setup the blur to start with no effect 
    self.blurredEffectView = [[UIVisualEffectView alloc] initWithEffect:nil]; 

    // Add animation to desired blur effect 
    [UIView animateWithDuration:1.0 animations:^{ 
     [self.blurredEffectView setEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; 
    }]; 

    // Pause layer animations 
    self.blurredEffectView.layer.speed = 0; 
} 

Regulacja rozmazania w zakresie od 0,0 do 1,0 (czas trwania animacji)

- (void) adjustBlur:(CGFloat)blurIntensity { 
    self.blurredEffectView.layer.timeOffset = blurIntensity; 
} 
  • Uwaga: to nie działa na iOS animacje UIBlurEffect 8, w którym nie są obsługiwane.
+1

Dzięki za to. Tego właśnie szukałem! –

+1

: D Dodatkowa uwaga: czasami wygląda na to, że animacja nie zadziała, dopóki nie zostanie dodany podgląd podzbioru "UIVisualEffectView" do hierarchii widoku. Zwykle tworzę instancję i dodaję rozmycie w 'viewDidLoad' i dodam animację później w' viewDidAppear: '. – Warpling

+0

Używam tej samej metody w Swift. Istnieje jednak błąd - gdy aplikacja przenosi się do tła, a następnie wraca, animacja automatycznie osiąga stan końcowy i nie jest już animowana. Czy wybraliście ten problem? Czy masz pomysł, jak to obejść? – suntime

Powiązane problemy