2009-09-21 7 views
2

Je veux retourner mon nouveau ModalView avec de très hautes performances, mais la nouvelle vue a beaucoup de sous-vues, donc les performances du Flip-Effect sont très mauvaises. En fait, je le fais avec:iPhone SDK: Optimiser UIModalTransitionStyleFlipHorizontal

[controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
[self presentModalViewController:backSideController animated:YES]; 

Je l'ai aussi essayé avec

CATransition *transition = [CATransition animation]; 
transition.duration = 0.75; 
[transition setType: @"flip"]; 
[transition setSubtype:@"fromRight"]; 

transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
[transition setFillMode:@"extended"]; 

[[self.view layer] addAnimation:transition forKey:nil]; 


[self.view addSubview: backSideController.view]; 
[CATransaction commit]; 

Avec Core-animation cela fonctionne un peu plus vite ... Ware il y a d'autres façons de opimize cette tâche? par exemple. Ajouter une vue lorsque l'animation s'arrête et retourner une capture d'écran jusqu'à ce que l'animation s'arrête?

Répondre

0

Essayez d'accéder à backsideController.view avant de commencer les animations. Cela provoquera l'appel de loadView et viewDidLoad de backsideController. Je devine que c'est votre coup de performance - que tout ce chargement & allocation provoque le bégaiement de l'animation.

Vous n'avez pas besoin de rien de fantaisie, vous pouvez faire quelque chose comme:

if (backsideController.view == nil) 
    NSLog(@"Where's my view?!"); 

avant tout autre code, ci-dessus.

Je ne crois pas qu'avoir beaucoup de sous-vues provoque des problèmes de performance sur le flip; Je suis assez sûr (sans regarder votre code ou en vérifiant dans les instruments, que vous devriez faire!) Que le problème est le temps qu'il faut pour charger et allouer les composants de la vue.

En outre, je voudrais rester avec presentModalViewController, si elle fait ce que vous voulez. Avoir tout ce code supplémentaire dans votre 2ème exemple - à moins que ce soit nécessaire pour la fonctionnalité - est juste un casse-tête de maintenance.