17

モーダルビューコントローラーを閉じるために素敵な方法を使用していました:

[self dismissModalViewControllerWithTransition:2];

これは、ナビゲーション コントローラーがビューをポップするように、左から右へのスライド トランジションを行います。

このメソッドは公開されていないメソッドであるため、Apple はこれを受け入れません。コードでこの種のアニメーションをプログラムするにはどうすればよいですか (左から右にスライドしてモーダル ビューを閉じ、右から左にスライドしてモーダル ビューを表示します)。

前もって感謝します

4

3 に答える 3

42

Safecaseからの回答を受け入れましたが、最終的な解決策をここに公開したいと思います。

1)モーダルビューコントローラーに右から左への遷移を表示するために、次の方法を記述しました。

-(void) presentModalView:(UIViewController *)controller {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.35;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;

    // NSLog(@"%s: self.view.window=%@", _func_, self.view.window);
    UIView *containerView = self.view.window;
    [containerView.layer addAnimation:transition forKey:nil];
    [self presentModalViewController:controller animated:NO];
}

2)左から右へのスライドトランジションを使用してモーダルビューを閉じるには:

-(void) dismissMe {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.35;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromLeft;

    // NSLog(@"%s: controller.view.window=%@", _func_, controller.view.window);
    UIView *containerView = self.view.window;
    [containerView.layer addAnimation:transition forKey:nil];

    [self dismissModalViewControllerAnimated:NO];
}

みんなありがとう!

于 2012-07-10T13:10:16.870 に答える
7

これを試して:

View Controller 1からView Controller 2を却下していると思います。View Controller 2では、これを使用しています

[self  dismissModalViewControlleAnimated: NO]];

ここで、最初のView ControllerのviewWillAppear:メソッドにコードを追加します

CATransition *animation = [CATransition animation];

[animation setDelegate:self];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromLeft];

[animation setDuration:0.50];
[animation setTimingFunction:
 [CAMediaTimingFunction functionWithName:
  kCAMediaTimingFunctionEaseInEaseOut]];


[self.view.layer addAnimation:animation forKey:kCATransition];
于 2012-07-10T12:14:49.953 に答える