2015-09-09 3 views
2

Test sous iOS 8.0 actuellement. Je fais face à un bug étrange (peut-être) avec UIVisualEffectView.UIVisualEffectView setHidden = YES extrêmement lent - bug bizarre?

-je ajouter la vue au-dessus du point de vue du contrôleur toute vue en tant que tel:

-(void)showBlur{ 
    if (!self.blurview) { 
     self.blurview = [[UIView alloc] initWithFrame:self.view.frame]; 
     UIVisualEffect *blurEffect2; 
     blurEffect2 = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 
     UIVisualEffectView * visualEffectView2 = [[UIVisualEffectView alloc] initWithEffect:blurEffect2]; 
     visualEffectView2.frame = self.view.frame; 
     [self.blurview addSubview:visualEffectView2]; 
     [self.view addSubview:self.blurview]; 
    } else { 
     self.blurview.hidden=NO; 
    } 
} 

Au-dessus est tout beau et je vois une vue floue au-dessus de toute la vue. Cependant, quand je dois cacher toute vue de flou en tant que tel:

-(void)hideBlur{ 
    NSLog(@"This gets printed before hidden: %@",[NSDate date]); 
    self.blurview.hidden=YES; 
    NSLog(@"This gets printed after hidden: %@",[NSDate date]); 
} 

Certains comment les 3 lignes de code sont exécutées, mais mon point de vue flou est encore visible. Si j'attends environ 5-10 secondes, la vue du flou disparaît. Notez également que même si la vue de flou est "visible" (bien qu'elle devrait être cachée maintenant), je suis en quelque sorte encore capable d'interagir avec les vues qui sont sous la vue de flou. Je vois leurs contours flous bouger et des choses quand j'interagis avec eux. Mais la vue du flou prend 5-10 secondes pour disparaître.

J'ai testé avec des instructions NSLog et des points de rupture et je vois que le ".hidden" est appelé avec succès dans le temps mais la vue reste visible pendant 5-10 secondes.

impressions PRÉCÉDENTES:

2015-09-09 00:55:21.542 Kitty[8600:1094199] This gets printed before hidden: 2015-09-09 04:55:21 +0000 
2015-09-09 00:55:21.543 Kitty[8600:1094199] This gets printed after hidden: 2015-09-09 04:55:21 +0000 

Est-ce une sorte de bug ??

Édition 2: J'avais initialement testé avec la vue d'effet visuel étant la vue elle-même au lieu de l'ajouter comme une sous-vue d'un autre UIView. Même problème là aussi.

Répondre

2

J'ai été capable de résoudre ce problème moi-même. J'appelais initialement la méthode hideBlur à partir d'une autre file d'attente de dispatch_async autre que la file d'attente principale. Je résolus en mettant la partie de mise à jour l'interface utilisateur sur la file d'attente principale comme ceci:

-(void)hideBlur{ 
    NSLog(@"This gets printed before hidden: %@",[NSDate date]); 
    dispatch_async(dispatch_get_main_queue(),^{ 
     self.blurview.hidden=YES; 
    }); 
    NSLog(@"This gets printed after hidden: %@",[NSDate date]); 
} 
+2

Paul Hegarty enseigne dans ses excellentes conférences de Stanford iTunes U que tout le code d'interface utilisateur doit se produire sur la file d'attente principale. – andrewbuilder

+0

oui convenu, était mon erreur –