5

ストーリーボードに 2 つのビュー コントローラーを設定しました。それぞれにアクション ボタンがあります。私は2つのセグエを設定しました:

  1. 最初のView Controllerから2番目のView Controllerへ:Modal、Flip Horizo​​ntal。
  2. 2 番目のビュー コントローラーから最初のビュー コントローラーへ: モーダル、水平反転。

すべてが機能しますが、一方向と逆方向に反転させたいのですが、両方のビューコントローラーで同じ方向に反転します。

フリップ フリップ バック エフェクトを作成する最も簡単な方法は何ですか?

4

3 に答える 3

6

私は同じ問題に遭遇し、うまくいけば解決策を見つけました。

カスタム セグエを使用して元に戻しました。これが私のコードですFlipLeftSegue

@implementation FlipLeftSegue
- (void)perform
{
    UIViewController *src = (UIViewController *) self.sourceViewController;
    UIViewController *dst = (UIViewController *) self.destinationViewController;    

    [UIView beginAnimations:@"LeftFlip" context:nil];
    [UIView setAnimationDuration:0.8];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:src.view.superview cache:YES];
    [UIView commitAnimations];

    [src presentViewController:dst animated:NO completion:nil];
}
@end

このソリューションで私が見つけた唯一の問題はviewDidAppear、アニメーションの開始時にメソッドがすぐに呼び出されることです。通常のセグエでは、アニメーションの後に呼び出されます。

于 2012-05-23T14:49:42.343 に答える
1

NSZombie の回答でこのコードを使用することをお勧めします。

- (void)swapChildVCFrom:(UIViewController *)from to:(UIViewController *)to options:(enum UIViewAnimationOptions)options
{
    [self addChildViewController:to];
    [from willMoveToParentViewController:nil];

    // Adjust the new child view controller's view's frame
    // For example here just set it to fill the parent view
    to.view.frame = self.view.bounds;

    [self transitionFromViewController:from
                      toViewController:to
                              duration:1.0
                               options:options
                            animations:nil
                            completion:^(BOOL b)
                            {
                                [to didMoveToParentViewController:self];
                                [from.view removeFromSuperview];
                                [from removeFromParentViewController];
                            }];
}
于 2014-05-29T12:48:51.027 に答える