所以,我有一个自定义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。
任何建议都会很棒。我在这里撞墙挡住了。
答案 0 :(得分:1)
可以使用
public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
{ ... }
答案 1 :(得分:0)
想出来。我已经覆盖了ShouldAutorotateToInterfaceOrientation(UIInterfaceOrientation toInterfaceOrientation)而不是ShouldAutorotate()。但这在iOS6中实际上已被弃用。还是要弄清楚如何以iOS6方式做到这一点,但现在这样做。
public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
...
}