2010-05-05 5 views
0

J'ai un seachButton dans la barre de navigation qui, lors d'appels suivant la méthode frappant:UIView animation ne fonctionne pas la première fois

- (IBAction)search:(id)sender 
{ 
if (nil == searchViewController) 
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil]; 

searchViewController.view.backgroundColor = [UIColor clearColor]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown 
         forView:searchViewController.view 
         cache:NO]; 

[self.view addSubview:searchViewController.view]; 
[UIView commitAnimations]; 
} 

Il doit charger SearchViewController.xib qui contient une vue avec UISearchBar et deux boutons. Quand j'appelle la méthode de recherche pour la première fois, la vue apparaît très rapidement avec une animation bizarre, quand je l'appelle à nouveau, l'animation va bien. Est-ce que quelqu'un a une idée de ce qui pourrait être faux?

Répondre

0

Un UIViewController ne charge pas sa vue tant que la méthode d'affichage n'est pas appelée. Je suppose que le problème est que la vue n'est pas chargée lorsque vous appelez l'animation pour la première fois. Vous pouvez essayer de vous modifier le code comme ceci:

if (nil == searchViewController) { 
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil]; 
    searchViewController.view; 
} 
+0

Malheureusement, il n'a pas fait l'affaire:/ – BobC

0

Essayez de mettre le code d'animation dans la fonction viewDidLoad. Cela garantit que tous les éléments et les vues du fichier nib ont été chargés et peuvent être utilisés par votre application.

- (IBAction)search:(id)sender 
{ 
if (nil == searchViewController) 
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil]; 

[self.view addSubview:searchViewController.view]; 
} 

-(void)viewDidLoad 
{ 
self.view.backgroundColor = [UIColor clearColor]; 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown 
        forView:self.view 
        cache:NO]; 
[UIView commitAnimations]; 
} 
+0

hmm, pas de changement ici. Pourrait être le problème que j'ajoute le superview est un UIWebView? – BobC

+0

J'ai oublié que viewDidLoad devrait être implémenté dans le SearchViewController.m. Cela signifie un remaniement de votre code. J'ai modifié le code ci-dessus pour refléter cela. J'espère que cela t'aides. – chris

+0

chris, toujours les mêmes problèmes. Je commence à croire que quelque chose d'autre est mon code bloque l'animation :( – BobC

0

Essayez de mettre le code pour les animations et le chargement de la vue dans la méthode viewDidAppear: au lieu de viewDidLoad: (dont Chris suggéré ci-dessus).

En général, j'ai eu des problèmes à faire des choses liées à la vue dans viewDidLoad:. Mais faire cela en viewDidAppear: m'a toujours aidé (il se peut que je manque une certaine subtilité qui provoque ce comportement).

1

Ajouter les deux vues à la fenêtre dans appdelegate, j'ai eu le même problème que vous aviez et cela a fonctionné. Étrange parce que plus tard, je les enlève de l'aperçu, mais il fonctionne toujours.

Questions connexes