次のようなカスタム セグエを使用しています。
@implementation ModalPushSegue
- (void)perform {
UIViewController *fromController = self.sourceViewController;
UIViewController *toController = self.destinationViewController;
UIView *fromView = fromController.view;
UIView *toView = toController.view;
CGPoint centerStage = toView.centerStage;
toView.center = toView.rightStage;
[fromView.window addSubview:toView];
[fromController addChildViewController:toController];
[UIView transitionWithView:toView
duration:0.5 options:0
animations:^{
toView.center = centerStage;
}
completion:nil];
}
これは、ビューが期待どおりに右からスライドし、コントローラーがコントローラー階層に追加されるという点でうまく機能します。
しかし、後で追加されたコントローラーでこれを行います:
[self presentViewController:anotherController animated:YES completion:nil];
これにより、新しいコントローラーのビューがモーダルスタイルで画面上にスライドすることが期待されます。しかし、代わりに新しいビューが表示されません。そして、後でこのコントローラーを削除すると、ビューが点滅して画面から滑り落ち、元のビューの代わりに黒い背景が残ります。
私はしばらくこれをいじっていましたが、コードを次のように変更すると
//[self presentViewController:oauthController animated:YES completion:nil];
[self.view addSubview:oauthController.view];
[self addChildViewController:oauthController];
その後、サイズは変更されませんが、ビューは期待どおりに表示されます。
私の問題は、セグエが階層を設定する方法とpresentViewController
物事を行う方法にあるようです。私は多くの読書と検索を行ってきましたが、これまでのところ、何が起こっているのかを正確に把握することはできませんでした.
セグエでの使用も試してみpresentViewController
ましたが、古いビューの上に新しいビューを配置する代わりに、画面が黒くなり、新しいビューがスライドします。
どんな助けでも感謝します。