Ios 自定义UIViewController在设备旋转时未接收方向更改通知
因此,我有一个自定义UIWindow、一个自定义UIViewController和一个自定义UIImageViewIos 自定义UIViewController在设备旋转时未接收方向更改通知,ios,uiviewcontroller,xamarin.ios,Ios,Uiviewcontroller,Xamarin.ios,因此,我有一个自定义UIWindow、一个自定义UIViewController和一个自定义UIImageView private class CoachingWindow : UIWindow { public CoachingWindow(...) { RootViewController = new CoachingOverlayViewController(...); } private class CoachingOverlayView
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的回退代码并且准备好测试这两个代码路径)。