2009-12-13 4 views
1

Je suis le chargement d'une vue dans mon application avec le code suivant:iPhone vue commutation - boucle transition

- (void)showPicker { 
ImagePickerViewController *imagePickerView = [[ImagePickerViewController alloc] initWithNibName:@"ImagePickerViewController" bundle:nil]; 
[self.navigationController presentModalViewController:imagePickerView animated:YES]; 

}

Comment puis-je charger avec une boucle vers le haut/courbe vers le bas transition?

Merci à l'avance,

Yassin

+0

Je ne pense pas que vous le pouvez, puisque vous présentez un contrôleur de vue modale, vous ne changez pas de vue mais de contrôleurs. Je viens de le tester avec des animations UIView basiques et le paramètre 'animated' réglé sur' NO', mais cela ne fonctionnait pas correctement. – Joost

+0

JoostK, vous devriez mettre cela dans une réponse afin que le système puisse le traiter. En ce moment, Yassin n'a aucun moyen de marquer la question comme si vous répondiez correctement. – TechZen

Répondre

7

En utilisant le code que vous montriez là, vous pouvez définir la propriété modalTransitionStyle de imagePickerView. Mais, vos valeurs possibles sont (à partir de la documentation du SDK):

  • UIModalTransitionStyleCoverVertical: Lorsque le contrôleur de vue est présenté, son point de vue glisse vers le haut à partir du bas de l'écran. Au moment du renvoi, la vue redescend. C'est le style de transition par défaut.
  • UIModalTransitionStyleFlipHorizontal: Lorsque le contrôleur de vue est présenté, la vue active initie un basculement 3D horizontal de droite à gauche, ce qui entraîne l'affichage de la nouvelle vue comme si elle se trouvait au dos de la vue précédente. Au moment du renvoi, le basculement se produit de gauche à droite, revenant à la vue d'origine.
  • UIModalTransitionStyleCrossDissolve: Lorsque le contrôleur de vue est présenté, la vue en cours disparaît alors que la nouvelle vue apparaît en même temps. Au moment du renvoi, un type similaire de fondu enchaîné est utilisé pour revenir à la vue d'origine.

Votre autre option nécessite que vous obteniez beaucoup plus d'amateurs. Supposons que le navigateur de navigation est le contrôleur de la vue racine de l'application, et qu'il est stocké dans une propriété de votre délégué d'application appelée navigationController. Vous pouvez implémenter les méthodes suivantes:

- (void)curlInViewController:(UIViewController *)viewController { 
    self.curledViewController = viewController; 

    [UIView beginAnimations:@"curlInView" context:nil]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.window cache:YES]; 
    [self.navigationViewController.view removeFromSuperview]; 
    [self.window addSubview:viewController.view]; 
    [UIView commitAnimations]; 
} 

- (void)curlOutViewController { 
    [UIView beginAnimations:@"curlOutView" context:nil]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:) 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES]; 
    [self.curledViewController removeFromSuperview]; 
    [self.window addSubview:navigationController.view]; 
    [UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { 
    if([animationID isEqualToString:@"curlOutView"]) { 
     self.curlViewController = nil; 
    } 
} 
+0

Super, merci beaucoup. J'utilise la propriété modalTransitionStyle maintenant, et demain je vais implémenter les méthodes que vous avez postées ci-dessus. – iYassin

4

Ceci est maintenant facilement disponible dans OS 3.2 et ci-dessus; vous le faites comme ceci: -

// if the legend button is tapped, curl up the map view to display the legend view underneath. 
- (IBAction) legendButtonPressed:(id) sender 
{ 
    UIViewController *legend = [[LegendViewController alloc] init]; 
    legend.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
    legend.modalPresentationStyle = UIModalPresentationFullScreen; 
    [self presentModalViewController:legend animated:YES]; 
    [legend release]; 
} 
+0

très bien Permettez-moi de mieux le formater –

1

J'aime ces questions dormantes. J'ai eu beaucoup de succès en faisant quelque chose comme ceci où vous utilisez une animation de transition de vue pour montrer la nouvelle vue et ensuite presentModalViewController dans le completionHandler pour que votre nouvelle vue soit traitée comme une vue modale.

UIView *container = self.view.window; 
    [self.theNewViewController viewWillAppear:YES]; 
    [UIView transitionWithView:container 
        duration:kAnimationViewTransition 
        options:UIViewAnimationOptionTransitionCurlUp 
       animations:^{ 
        [self.navigationController.view removeFromSuperview]; 
        [container addSubview: self.theNewViewController.view]; 
       } 
       completion:^(BOOL finished) { 
        [self presentModalViewController:self.theNewViewController animated:NO]; 
       } 
]; 
Questions connexes