2016-08-31 1 views
6

Actuellement, j'utilise un UIVisualEffectView pour appliquer un flou à une image.Comment le flou de UIVisualEffectView peut-il être modifié en faisant glisser dans iOS?

J'ai un UIScrollView. Comme je descends sur le scrollView, dans ma méthode "scrollViewDidScroll", je change l'alpha de l'UIVisualEffectView. Le comportement actuel de ceci est que le rayon de flou change facilement lorsque je me déplace dans la vue.

Le problème est, bien sûr, je ne suis pas censé faire cela. Obtenir des avertissements concernant la modification de la valeur alpha d'un UIVisualEffectView.

J'ai vu les gens disent de faire une transition en douceur de flou à l'aide d'une animation, comme celui-ci ici: How to fade a UIVisualEffectView and/or UIBlurEffect in and out?

Cependant, je n'ai pas vu tout ce qui me permet de le faire pendant, disons un pan- geste ou quelque chose. Je veux dire, si je mets en place une animation avec un montant chronométré, tout va bien. Mais le faire pendant une traînée?

Répondre

7

Il y a une façon :)

Comme vous l'avez remarqué, vous pouvez animer d'un effet nil à un effet comme UIBlurEffectStyleDark si l'on ajoute une animation, puis mettre en pause les animations de la couche que nous pouvons contrôler les progrès de l'effet en ajustant la couche 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; 
} 

Régler le flou entre 0,0 et 1,0 (durée de l'animation):

- (void) adjustBlur:(CGFloat)blurIntensity { 
    self.blurredEffectView.layer.timeOffset = blurIntensity; 
} 
  • Note: cela ne fonctionnera pas sur iOS 8 où les animations ne sont pas pris en charge UIBlurEffect.
+1

Merci pour votre inscription. C'était juste ce que je cherchais! –

+1

: D Remarque supplémentaire: il semble parfois que l'animation ne fonctionne pas tant que la sous-vue 'UIVisualEffectView' n'est pas ajoutée à la hiérarchie de vue. J'instancie habituellement le flou dans 'viewDidLoad' et j'ajoute l'animation plus tard dans' viewDidAppear: '. – Warpling

+0

J'utilise la même méthode dans Swift. Cependant, il y a un bug - lorsque l'application passe en arrière-plan, puis revient, l'animation atteint automatiquement son état final et ne s'anime plus. Avez-vous les gars autour de ce problème? Avez-vous une idée de comment contourner cela? – suntime