Question

Veuillez considérer le code ci-dessous et dites-moi ce que je fais de mal.

Je veux basculer entre deux UIViews.

D'une manière ou d'une autre, lorsque je m'éloigne de la vue initiale, je ne reçois que la vue retournée, sans animation. Quand je retourne en arrière, l'animation montre très bien.

Les retournements sont déclenchés à partir des boutons des vues elles-mêmes.

- (IBAction)showMoreInfo:(id)sender
{
    UIView *moreInfo = self.flipView;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];

    UIView *parent = self.view.superview;
    [self.view removeFromSuperview];

    [parent addSubview:moreInfo];

    [UIView commitAnimations];

}



- (IBAction)showLessInfo:(id)sender
{
    UIView *lessInfo = self.view;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.flipView cache:YES];

    UIView *parent = self.flipView.superview;
    [self.flipView removeFromSuperview];

    [parent addSubview:lessInfo];

    [UIView commitAnimations];

}
Était-ce utile?

La solution

C'est probablement parce que vous n'utilisez pas une vue conteneur en tant que vue de transition. Reportez-vous à la documentation sur setAnimationTransition: forView: cache:

  

Si vous souhaitez modifier l'apparence d'une vue lors d'une transition & # 8212, par exemple, passez d'une vue à une autre & # 8212; utilisez ensuite une vue conteneur, une instance d'UIView, comme suit :

     
      
  1. Commencez un bloc d'animation.
  2.   
  3. Définissez la transition sur la vue du conteneur.
  4.   
  5. Supprimez la sous-vue de la vue du conteneur.
  6.   
  7. Ajoutez la nouvelle sous-vue à la vue du conteneur.
  8.   
  9. Commettez le bloc d'animation.
  10.   

Essayez d’utiliser self.view.superview dans la vue de transition d’animation du showMoreInfo:

.

Si showLessInfo: la méthode fonctionne, vous utilisez une vue conteneur.

Autres conseils

Pouvez-vous utiliser votre MainWindow (UIWindow) en tant que vue conteneur en tant que UIWindow hérité de UIView?

iPhone 3.0 a également introduit la transaction Flip via la méthode presentModalViewController:

CustomViewController *vc = [[CustomViewController alloc]
    initWithNibName:@"CustomViewController" bundle:nil];

vc.delegate = self;

// The magic statement. This will flip from right to left.
// present the modal view controller then when you dismissModalViewController
// it will transition flip from left to right. Simple and elegant.
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController:vc animated:YES];

[vc release];

Après iOS 4.0, vous pouvez basculer entre les vues avec ceci:

[UIView transitionFromView:sourceView toView:destinationView duration:0.35f options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) {
    NSLog(@"I just flipped!");
}];

Comme Jason l'a mentionné, vous aurez besoin que cela se produise dans une vue conteneur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top