1

J'essaie de fondre en une nouvelle image. Ceci est un UIImageView qui a un UIVisualEffectView ajouté à ce:Comment fondre l'image de UIImageView avec le flou appliqué

self.bgBlurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 
self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:self.bgBlurEffect]; 

self.visualEffectView.frame = self.bgImageView.bounds; 
[self.bgImageView addSubview:self.visualEffectView]; 

Voici comment je suis en train de disparaître à la nouvelle image:

UIImage *toImage = [UIImage imageNamed:imgName]; 

CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"]; 
crossFade.duration = 2.5; 
crossFade.delegate = self; 
crossFade.fromValue = (id)self.bgImageView.image.CGImage; 
crossFade.toValue = (id)toImage.CGImage; 
[self.bgImageView.layer addAnimation:crossFade forKey:@"animateContents"]; 
self.bgImageView.image = toImage; 

Cela fonctionne en fait dans le simulateur, mais sur la appareil (iPhone 6), l'image devient complètement grise pendant 2,5 secondes, puis la nouvelle image apparaît instantanément. Des idées pour résoudre le problème?

EDIT: Cela ne fonctionne pas non plus:

[UIView transitionWithView:self.bgImageView 
        duration:2.5 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        self.bgImageView.image = toImage; 
       } completion:nil]; 

Répondre

0

Peut-être que cette approche fonctionnera pour l'animation de fondu:

self.bgImageView.image = toImage; 

CATransition *fadeTransition = [CATransition animation]; 
fadeTransition.duration = 2.5; 
fadeTransition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
fadeTransition.type = kCATransitionFade; 

[self.bgImageView.layer addAnimation:fadeTransition forKey:nil]; 
+0

qui ne fonctionne pas. 'self.bgImageView.image = toImage;' définit la nouvelle image immédiatement. Puis 2,5 secondes plus tard, il devient flou. – soleil

+0

@soleil essayez d'ajouter visualEffectView à la même vue que vous ajoutez le bgImageView et assurez-vous qu'il est au-dessus de bgImageView afin qu'il soit flou (vous devrez également lui donner le même cadre pour qu'il couvre tout). J'ai essayé ça et ça a marché pour moi. – Artal