Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义UIViewController在设备旋转时未接收方向更改通知_Ios_Uiviewcontroller_Xamarin.ios - Fatal编程技术网

Ios 自定义UIViewController在设备旋转时未接收方向更改通知

Ios 自定义UIViewController在设备旋转时未接收方向更改通知,ios,uiviewcontroller,xamarin.ios,Ios,Uiviewcontroller,Xamarin.ios,因此,我有一个自定义UIWindow、一个自定义UIViewController和一个自定义UIImageView private class CoachingWindow : UIWindow { public CoachingWindow(...) { RootViewController = new CoachingOverlayViewController(...); } private class CoachingOverlayView

因此,我有一个自定义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显示为覆盖在其余现有UIWindow上,视图控制器被正确指定为RootViewController,视图被指定给视图控制器的view属性。因此,所有渲染都是正确的

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

我想这可能与我使用自定义UIWindow有关。也许窗户没有关上;是否接收到来自iOS的方向更改通知?或者iOS是否将这些通知直接发送到视图控制器?也许我必须让视图控制器订阅这些事件,因为它是一个自定义视图控制器

我正在使用MonoTouch和iOS 6


任何建议都很好。我的头撞到墙上了。

我想出来了。我已经重写了ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation到InterfaceOrientation),而不是ShouldAutorotate()。但这在iOS6中实际上是不推荐的。我们仍然需要弄清楚如何用iOS6的方式来做,但现在就可以了

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

我明白了。我已经重写了ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation到InterfaceOrientation),而不是ShouldAutorotate()。但这在iOS6中实际上是不推荐的。我们仍然需要弄清楚如何用iOS6的方式来做,但现在就可以了

public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
     ...
}
在iOS 6中,您可以使用

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    { ... }
在iOS 6中,您可以使用

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    { ... }

您是否尝试过-(void)viewwillbeen:(BOOL)动画?您是否尝试过-(void)viewwillbeen:(BOOL)动画?您是否支持仅限iOS6的设备?如果是这样的话,您可以随时停止使用不推荐的方法(或者在Apple删除它们之前,请记住仍然有一些方法在iOS 2.0中不推荐使用)。如果你支持人们使用ios5.x(或更早版本),那么继续使用现有的(它仍然存在并且在iOS6中工作)方法。在某些情况下,替换方法可以提供一些优势,您可能希望在同一个应用程序中同时支持(旧的和新的)代码路径(以获得每个iOS版本的最佳体验),但这并不常见。我需要在此版本中支持iOS 5。然后尝试避免iOS 4.3(及更早版本)中不推荐的API因为这将使将来维护代码变得更容易。也不要使用iOS 6.0中引入的API,即使它不支持5.0中的API(除非您有iOS 5的回退代码并准备好测试这两个代码路径)。您是否只支持iOS 6设备?如果是这样的话,您可以随时停止使用不推荐的方法(或者在Apple删除它们之前,请记住仍然有一些方法在iOS 2.0中不推荐使用)。如果你支持人们使用ios5.x(或更早版本),那么继续使用现有的(它仍然存在并且在iOS6中工作)方法。在某些情况下,替换方法可以提供一些优势,您可能希望在同一个应用程序中同时支持(旧的和新的)代码路径(以获得每个iOS版本的最佳体验),但这并不常见。我需要在此版本中支持iOS 5。然后尝试避免iOS 4.3(及更早版本)中不推荐的API因为这将使将来维护代码变得更容易。也不要使用iOS 6.0中引入的API,即使它不支持5.0中的API(除非您有iOS 5的回退代码并且准备好测试这两个代码路径)。