1

次のようなカスタム セグエを使用しています。

@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ましたが、古いビューの上に新しいビューを配置する代わりに、画面が黒くなり、新しいビューがスライドします。

どんな助けでも感謝します。

4

1 に答える 1