1

したがって、カスタム UIWindow、カスタム UIViewController、およびカスタム UIImageView があります。

private class CoachingWindow : UIWindow
{
    public CoachingWindow(...)
    {
        RootViewController = new CoachingOverlayViewController(...);
    }

    private class CoachingOverlayViewController : UIViewController
    {
        public CoachingOverlayViewController(...)
        {
            View = new CoachingOverlayView(...);
        }

        public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation)
        {
            ...
        }

        public override bool ShouldAutorotate()
        {
            return true;
        }

        private class CoachingOverlayView : UIImageView
        {
            public CoachingOverlayView(...)
            {
                ...
            }
        }
    }
}

ウィンドウ、ビュー コントローラー、およびビューはすべて、最初に呼び出されたときに適切に表示されます。カスタム UIWindow は既存の UIWindows の残りの上にオーバーレイとして表示され、ビュー コントローラーは RootViewController として適切に割り当てられ、ビューは の View プロパティに割り当てられます。ビューコントローラー。したがって、すべて正しくレンダリングされます。

ただし、デバイスまたはシミュレーターを物理的に回転させると、オーバーライドされた DidRotate() および ShouldAutorotate() メソッドが呼び出されることはありません。

カスタムUIWindowを使用しているという事実と関係があるのではないかと考えています。おそらくウィンドウは、iOS からの方向変更の通知を受け取っていませんか? または、iOS はこれらの通知をビュー コントローラーに直接送信しますか? カスタムView Controllerであるため、View Controllerをこれらのイベントにサブスクライブさせる必要があるのでしょうか???

MonoTouch と iOS 6 を使用しています。

どんな提案も素晴らしいでしょう。ここで壁に頭をぶつけています。

4

2 に答える 2

1

iOS 6では使用できます

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    { ... }
于 2012-11-22T13:23:23.303 に答える
0

Figured it out. I had override ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation) instead of ShouldAutorotate(). But this is actually deprecated in iOS6. Still have to figure out how to do it the iOS6 way, but this will do for now.

public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
     ...
}
于 2012-11-21T19:35:58.577 に答える