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,视图被分配给视图控制器。所以,这一切都正确呈现。

但是,当我物理旋转设备或模拟器时,永远不会调用重写的 DidRotate() 和 ShouldAutorotate() 方法。

我认为这可能与我使用自定义 UIWindow 的事实有关。也许窗口没有收到来自 iOS 的方向更改通知?还是 iOS 将这些通知直接发送到视图控制器?也许我必须以某种方式让视图控制器订阅这些事件,因为它是一个自定义视图控制器???

我正在使用 MonoTouch 和 iOS 6。

任何建议都会很棒。我在这里用头撞墙。

4

2 回答 2

1

在 iOS 6 中,您可以使用

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

弄清楚了。我已经覆盖了 ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation) 而不是 ShouldAutorotate()。但这实际上在 iOS6 中已被弃用。仍然必须弄清楚如何以 iOS6 的方式进行操作,但现在就可以了。

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