1

这个问题有点奇怪。在 Adob​​e AIR 中,我试图将我的应用程序的 iPhone 和 iPad 版本组合成一个应用程序。但是我很难处理方向。我需要 iPad 上的应用程序以横向模式显示,而在 iPhone 上它应该以纵向模式显示。

这可以做到吗?

4

3 回答 3

2

在 shouldAutorotateToInterfaceOrientation 中执行此操作

但不要忘记相应地调整视图(为 subView 设置适当的帧)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
     return UIInterfaceOrientationIsPortrait(interfaceOrientation);
 else
     return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
于 2012-09-27T12:14:13.087 回答
1

第一个问题是检测设备是 iPad 还是 iPhone。我相信做到这一点的唯一方法是检查设备分辨率(当然,您可以为不同的设备分发单独的二进制文件,但您提到在一个应用程序中执行此操作)。

通常您可以在 XML 应用程序描述符中处理屏幕旋转,例如:

<aspectRatio>landscape</aspectRatio>
<autoOrients>false</autoOrients>

但是,由于您想根据设备执行不同的操作,因此这是行不通的。

我过去使用的另一种方法是检测方向事件并阻止默认设置并通过 AS3 手动设置方向。这是一个很好的例子:AS3 - iOS force landscape mode only?

使用那里提供的代码示例,只需获取您的设备检测/屏幕分辨率检测代码并将屏幕方向设置为该设备的适当检测(并防止该设备的适当方向事件)。

于 2012-09-27T13:59:23.050 回答
0

如果您仍然需要它,我对“仅强制横向模式”进行了调整,以仅对纵向执行相同操作。这是代码:

var startOrientation:String = stage.orientation;
if ( startOrientation == StageOrientation.ROTATED_RIGHT)
  {
    stage.setOrientation(StageOrientation.UPSIDE_DOWN);
  }else if(startOrientation == StageOrientation.ROTATED_LEFT){
      StageOrientation.DEFAULT;
  }
  else
  {
    stage.setOrientation(startOrientation);
  }                    

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChangeListener);

function orientationChangeListener(e:StageOrientationEvent)
{
   if (e.afterOrientation ==  StageOrientation.ROTATED_RIGHT || e.afterOrientation ==  StageOrientation.ROTATED_LEFT )
   {
     e.preventDefault();
   }
}
于 2013-01-31T18:34:40.577 回答