AS3 - 仅 iOS 强制横向模式?

Posted

技术标签:

【中文标题】AS3 - 仅 iOS 强制横向模式?【英文标题】:AS3 - iOS force landscape mode only? 【发布时间】:2011-07-02 19:50:48 【问题描述】:

我为 ios 构建了一款专为横向模式设计的游戏,它运行良好,只是如果您将设备切换到纵向模式,它会停在那里,界面仅填充大约屏幕的中半部分。如何强制应用程序只允许两种横向模式,而不是停在纵向位置。

我已经尝试了所有的发布设置。为横向设置了纵横比并选中了自动方向,如果我取消选中应用程序不会旋转到其他横向模式的自动方向并且我听说这是来自 Apple 的自动拒绝。

除了这个小缺陷之外,此应用程序已准备就绪。感谢您提供的任何帮助。

丰富

【问题讨论】:

我错过了您要求执行的操作与 Apple 拒绝执行的操作之间的区别...您想保持自动旋转,但只让应用旋转到横向,而 Apple 拒绝如果应用程序在所有状态下运行都有意义,则支持所有方向。 Apple 不要求 iPad 应用程序允许横向和纵向,它们只要求横向或纵向都可以工作。 Flash 构建的 ipa 允许我的横向应用程序停止在纵向位置并缩小内容以适应。下面的代码解决了这个问题。 【参考方案1】:

几天前我在 Adob​​e 论坛上找到了这个问题的答案。

将纵横比设置为自动。

将自动方向设置为允许。

然后在您的主剪辑上使用此代码:

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

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChangeListener);

function orientationChangeListener(e:StageOrientationEvent)

   if (e.afterOrientation == StageOrientation.DEFAULT || e.afterOrientation ==  StageOrientation.UPSIDE_DOWN)
   
     e.preventDefault();
   

对我来说工作得很好..

【讨论】:

【参考方案2】:

另一种虽然类似的方法是在应用程序描述符中将 aspectRatio 设置为 Landscape,并将 autoOrients 设置为 false。然后在应用程序加载后启用 autoOrients 并监听orientationChanging 事件。在 Flash Builder 4.6 中,可以按如下方式完成:

描述符:

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

应用代码:

private function applicationCompleteHandler():void 
    stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, stageOrientationChangingHandler);
    stage.autoOrients = true;


private function stageOrientationChangingHandler(event:StageOrientationEvent):void 
    if (event.afterOrientation == StageOrientation.DEFAULT || event.afterOrientation == StageOrientation.UPSIDE_DOWN) 
        event.preventDefault();
    

看起来您还必须确保应用程序具有明确的尺寸;否则,即使舞台没有重新定向,视图仍然可以调整大小。

请看: http://bugs.adobe.com/jira/browse/SDK-32082

【讨论】:

【参考方案3】:

上面的答案对我不起作用,因为在 iOS 上 preventDefault 不再起作用。

对于那些仍然没有好运的人......这就是我所做的。

我想要:

Ipad 和所有 android 平板设备能够纵向或横向并在任何方向自动旋转

Iphone、Ipods 和所有小屏幕设备强制横向(或者在您的情况下您可能需要强制纵向)。

我做到了:

在我的 -app.xml 中:

<aspectRatio>any</aspectRatio>
<autoOrients>true</autoOrients>

在动作脚本中:

        var screenDPI:Number = Capabilities.screenDPI;
        var resolutionX:Number = Capabilities.screenResolutionX;
        var resolutionY:Number = Capabilities.screenResolutionY;            
        var numDiagonalDistance:Number = Math.round(Math.sqrt((resolutionX*resolutionX)+(resolutionY*resolutionY)));            
        var numDiagonalInches:Number = numDiagonalDistance/screenDPI;


            if(numDiagonalInches<6)
                MainData.SMALL_DEVICE=true;
            else
                MainData.SMALL_DEVICE=false;                        
            


        if(MainData.SMALL_DEVICE)
            this.stage.setAspectRatio(StageAspectRatio.LANDSCAPE);
        

虽然我猜你可以轻松地放置 StageAspectRatio.PORTRAIT 甚至使用反向逻辑来仅逻辑 ipad 或其他东西。祝你好运!

已编辑:我实际上正在编辑它,因为即使这种方法仍然存在问题。您将获得横向,但并不总是以您握持设备的方式为导向的横向...

再次编辑(2014 年 2 月 27 日):如果我包含 -swf-version 23(现在使用 AIR 4.0),这个问题终于解决了。

【讨论】:

以上是关于AS3 - 仅 iOS 强制横向模式?的主要内容,如果未能解决你的问题,请参考以下文章

强制视图仅支持横向模式

有没有办法强制 SwiftUI 中的横向模式仅用于某些视图?

强制 UIViewController 处于横向模式 iOS7

在一个模式视图控制器上强制 iOS 方向为横向

如何强制 iOS 应用以纵向模式启动

在 Objective-C 中的 iOS 6 上强制横向方向