Pergunta

por favor considere o código abaixo, e diga-me o que eu estou fazendo errado.

Eu quero virar entre dois UIViews.

De alguma forma, quando eu virar longe da visão inicial, eu só obter a visão invertida, sem animação. Quando eu virar para trás, os espectáculos de animação muito bem.

Os flips são acionados a partir de botões nos próprios pontos de vista.

- (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];

}
Foi útil?

Solução

Provavelmente é porque você não está usando uma visão recipiente como a visão de transição. Consulte a documentação em setAnimationTransition: forView: cache:

Se você quiser alterar a aparência de uma visão durante a transição, por exemplo, aleta de uma vista para outra, em seguida, usar uma exibição recipiente, uma instância de UIView, da seguinte forma:

  1. Comece um bloco de animação.
  2. Definir a transição na visão recipiente.
  3. Remova o subexibição do ponto de vista do recipiente.
  4. Adicione o novo subexibição à vista recipiente.
  5. Commit o bloco de animação.

Tente usar self.view.superview na vista transição animação do showMoreInfo:

A razão o método showLessInfo: funciona é que você está usando uma visão recipiente.

Outras dicas

Você pode usar seu MainWindow (UIWindow) como a visão de recipiente como UIWindow inerência de UIView?

Além disso iPhone 3.0 introduziu a transação aleta através do método 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];

Depois de iOS 4.0, você pode alternar entre pontos de vista com o seguinte:

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

Como Jason mencionado, você vai precisar disso para ocorrer dentro de uma visão recipiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top