自定义UIViewController在设备轮换时未收到方向更改通知

时间:2012-11-21 16:48:45

标签: ios uiviewcontroller xamarin.ios

所以,我有一个自定义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。

任何建议都会很棒。我在这里撞墙挡住了。

2 个答案:

答案 0 :(得分:1)

在iOS 6中

可以使用

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    { ... }

答案 1 :(得分:0)

想出来。我已经覆盖了ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)而不是ShouldAutorotate()。但这在iOS6中实际上已被弃用。还是要弄清楚如何以iOS6方式做到这一点,但现在这样做。

public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
     ...
}