这个问题有点奇怪。在 Adobe AIR 中,我试图将我的应用程序的 iPhone 和 iPad 版本组合成一个应用程序。但是我很难处理方向。我需要 iPad 上的应用程序以横向模式显示,而在 iPhone 上它应该以纵向模式显示。
这可以做到吗?
这个问题有点奇怪。在 Adobe AIR 中,我试图将我的应用程序的 iPhone 和 iPad 版本组合成一个应用程序。但是我很难处理方向。我需要 iPad 上的应用程序以横向模式显示,而在 iPhone 上它应该以纵向模式显示。
这可以做到吗?
在 shouldAutorotateToInterfaceOrientation 中执行此操作
但不要忘记相应地调整视图(为 subView 设置适当的帧)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
else
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
第一个问题是检测设备是 iPad 还是 iPhone。我相信做到这一点的唯一方法是检查设备分辨率(当然,您可以为不同的设备分发单独的二进制文件,但您提到在一个应用程序中执行此操作)。
通常您可以在 XML 应用程序描述符中处理屏幕旋转,例如:
<aspectRatio>landscape</aspectRatio>
<autoOrients>false</autoOrients>
但是,由于您想根据设备执行不同的操作,因此这是行不通的。
我过去使用的另一种方法是检测方向事件并阻止默认设置并通过 AS3 手动设置方向。这是一个很好的例子:AS3 - iOS force landscape mode only?
使用那里提供的代码示例,只需获取您的设备检测/屏幕分辨率检测代码并将屏幕方向设置为该设备的适当检测(并防止该设备的适当方向事件)。
如果您仍然需要它,我对“仅强制横向模式”进行了调整,以仅对纵向执行相同操作。这是代码:
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();
}
}