ios - 在横向方向创建的ios Monotouch视图显示为纵向方向

  显示原文与译文双语对照的内容
149 0

我创建了一个视图控制器,并将视图的方向设置在 XCode 4.2 ( 接口生成器) 中。但是,当我添加视图时,视图将以纵向方向显示。我已经将ShouldAutorotateToInterfaceOrientation重写到 return true 中的所有视图控制器,并尝试使用以下代码手动旋转视图:

this.View.Transform.Rotate ( 3.14 *. 5 f ) ;

我还尝试将框架设置为一个横向框架( 例如 。480 X 320 ),尽管视图框架已经正确设置。

我只是想澄清一下,我的大部分观点都是纵向的。我想以景观方向加载 横向视图,不管设备实际上是什么方向。这可能如果是的话,我在哪里?

感谢你对此事的任何帮助 !

更新:我注意到ShouldAutorotateToInterfaceOrientation只在加载视图时被调用一次。当设备旋转时不调用它。这是正常行为?

时间:原作者:0个回答

97 1

每次设备方向改变时都会调用 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模式下定向,并且每次都将新设备方向写入控制台。

当加载视图时,然后将它的推到( 例如) 上,然后它仍处于纵向模式( 并且不调用 ShouldAutorotateToInterfaceOrientation ) 。

从 objective-c 中,很容易强制设备方向,但在agavi中,似乎没有直接映射。

解决方案;

向 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);
 }

你现在可以手动更改整个设备的方向。更重要的是,如果使用 is,一旦从堆栈中弹出这个视图,方向将返回正常。

原作者:
146 2

我认为,对于你总是希望以横向方向显示的横向视图,你需要在ShouldAutorotateToInterfaceOrientation中进行 return false 或者删除覆盖。这将防止在设备处于纵向模式时自动旋转视图。

原作者:
...