Domanda

ti preghiamo di considerare il codice qui sotto e dimmi cosa sto facendo di sbagliato.

Voglio passare tra due UIVview.

In qualche modo, quando mi allontano dalla vista iniziale, ottengo solo la vista capovolta, senza animazione. Quando torno indietro, l'animazione si presenta bene.

Le lancette vengono attivate dai pulsanti delle viste stesse.

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

}
È stato utile?

Soluzione

Probabilmente è perché non stai usando una vista contenitore come vista di transizione. Fare riferimento alla documentazione su setAnimationTransition: forView: cache:

  

Se si desidera modificare l'aspetto di una vista durante una transizione & # 8212; ad esempio, passare da una vista all'altra & # 8212; quindi utilizzare una vista contenitore, un'istanza di UIView, come segue :

     
      
  1. Inizia un blocco animazione.
  2.   
  3. Imposta la transizione nella vista contenitore.
  4.   
  5. Rimuovi la vista secondaria dalla vista contenitore.
  6.   
  7. Aggiungi la nuova sottoview alla vista contenitore.
  8.   
  9. Commette il blocco animazione.
  10.   

Prova a utilizzare self.view.superview nella vista di transizione animata di showMoreInfo:

Il motivo per cui il metodo showLessInfo: funziona è che stai usando una vista contenitore.

Altri suggerimenti

È possibile utilizzare MainWindow (UIWindow) come vista contenitore come eredità UIWindow da UIView?

Anche iPhone 3.0 ha introdotto la transazione di inversione tramite il metodo 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];

Dopo iOS 4.0, puoi passare da una vista all'altra con questo:

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

Come menzionato Jason, è necessario che ciò avvenga all'interno di una vista contenitore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top