每次設備方向更改時都會調用ShouldAutorotateToInterfaceOrientation。
public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
{
Console.Out.WriteLine(toInterfaceOrientation.ToString());
// Return true for supported orientations
// This particular screen is landscape only!
return (toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight);
}
此代碼將只允許以使自身在任一landscapeleft或landscaperight模式,以及新設備的方向每次寫入控制檯。
時加載的觀點,並將其推入(例如)一個UINavigationController然而,它仍處於縱向模式(而ShouldAutorotateToInterfaceOrientation不叫。)
從Objective-C的
,這也很容易給力設備方向,但在MonoTouch中,似乎沒有直接映射。
該解決方案;
發送消息到objective-c運行時,指定我們想要的方向。
可以很容易地通過加入以下視圖控制器執行以下操作:
Selector orientationSetter;
private void SetOrientation (UIInterfaceOrientation toOrientation)
{
if (orientationSetter == null)
{
orientationSetter = new Selector ("setOrientation:");
}
Messaging.void_objc_msgSend_int (UIDevice.CurrentDevice.Handle,
orientationSetter.Handle, (int)toOrientation);
}
現在可以手動改變整個裝置的取向。更重要的是,如果你使用UINavigationController,一旦這個視圖彈出堆棧,方向將恢復正常。
當你說你重寫了ShouldAutorotateToInterfaceOrientation返回true ...你的意思是你正在返回以下?:return toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight; – Anuj