Frage

Sie den Code unten, betrachten und sagen Sie mir, was ich falsch mache.

Ich möchte zwischen zwei UIViews kippen.

Irgendwie, wenn ich aus der ursprünglichen Ansicht Flip weg, bekomme ich nur die blätterte Ansicht, ohne Animation. Wenn ich Flip zurück, zeigt die Animation gut.

Die Flips sind von Schaltflächen auf den Ansichten ausgelöst selbst.

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

}
War es hilfreich?

Lösung

Es ist wahrscheinlich, weil Sie keinen Container Ansicht als Übergangsansicht verwenden. Beachten Sie die Dokumentation auf setAnimationTransition: forView: cache:

  

Wenn Sie das Aussehen einer Ansicht während eines Übergangs-beispielsweise ändern möchten, drehen sie von einer Ansicht zur anderen-dann einen Container Ansicht verwenden, um eine Instanz von UIView, wie folgt:

     
      
  1. Starten Sie eine Animation Block.
  2.   
  3. Stellen Sie den Übergang auf den Container-Ansicht.
  4.   
  5. Entfernen Sie die Subview aus dem Behälter Ansicht.
  6.   
  7. Fügen Sie den neuen subview zum Container-Ansicht.
  8.   
  9. Commit die Animation Block.
  10.   

Versuchen self.view.superview in der Animation Übergang Ansicht des showMoreInfo: mit

Der Grund für die showLessInfo: Methode funktioniert, ist eine Container-Ansicht verwenden.

Andere Tipps

Können Sie Ihre Mainwindow (UIWindow) als Behälter Ansicht als UIWindow inherence von UIView verwenden?

Auch 3.0 iPhone die Flip-Transaktion über das PresentModalViewController Verfahren eingeführt:

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

Nach dem iOS 4.0, Sie zwischen den Ansichten mit dieser Flip können:

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

Als Jason erwähnt, werden Sie diese müssen innerhalb eines Behälters Ansicht auftreten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top