2013-05-07 1 views
4

Après avoir tapé sur UIView, je le cache et initialise un nouvel objet avec UIView et Quartz drawRect.Pourquoi UIImageView ne se cache qu'après un délai?

- (void)viewTapped:(UITapGestureRecognizer *)recognizer { 
    self.vignetteView.hidden=true; 
    lupeItself = [[LoupeView alloc] initWithView:_pageView setZoomImageName:_zoomPageImageName setDelegate:self]; 
} 

Le code ci-dessus masque l'UImageView seulement après un délai de 2 secondes. Mais si la dernière ligne (LoupeView alloc etc.) est supprimée, elle est immédiatement masquée. Pourquoi? Comment faire pour masquer la vue instantanément?

Répondre

7

La modification .hidden = true ne sera pas visible tant que le chemin d'exécution ne sera pas retourné à la boucle principale. La deuxième ligne bloque probablement pendant quelques secondes, empêchant ces changements de se produire (ou drawRect prend beaucoup de temps plus loin dans le pipeline).

La solution la plus simple serait de reporter la deuxième ligne jusqu'à ce que la prochaine itération de runloop:

self.vignetteView.hidden = YES; 
// defer execution so the above changes are immediately visible 
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
    lupeItself = [[LoupeView alloc] initWithView:_pageView setZoomImageName:_zoomPageImageName setDelegate:self]; 
}]; 

En outre, un point mineur: vous devez utiliser les constantes YES et NO pour BOOL propriétés et arguments, au lieu de true et false.

Questions connexes