StageOrientationEvent.ORIENTATION_CHANGING 未调度

Posted

技术标签:

【中文标题】StageOrientationEvent.ORIENTATION_CHANGING 未调度【英文标题】:StageOrientationEvent.ORIENTATION_CHANGING not dispatched 【发布时间】:2016-05-28 11:59:49 【问题描述】:

我正在 iPhone 4 上测试我的 starling 应用程序,我怀疑这是由于过时的 ios 版本而发生的。

包


    导入 flash.events.Event;
    导入 flash.events.StageOrientationEvent;
    导入 flash.display.Sprite;

    公共类 Startup 扩展 Sprite
    

        公共函数启动():无效
        
            addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        

        私有函数 onAddedToStage(e:Event):void
        
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING,orientationChangeListener);
        

        私有函数orientationChangeListener(e:StageOrientationEvent):void
        
            Debug.write("方向:" + stage.orientation); //从未调用
        

    

application.xml 的 autoOrients 设置为“true”,aspectRatio 设置为“landscape”,我还尝试按照一些 *** 答案中的建议删除 aspectRatio,但无济于事。

StageOrientationEvent.ORIENTATION_CHANGING 从未在我的应用程序中分派。

另一件奇怪的事情正在发生,这可能有助于您更好地了解情况:

即使在 application.xml 中将 aspectRatio 设置为“landscape”,应用程序仍以纵向模式打开,并且 stage.orientation 返回“rotatedRight”(表示横向)。 我只能通过在application.xml中将aspectRatio设置为“portrait”,然后在运行时手动设置为“landscape”来正确设置为横向:

stage.setOrientation(StageOrientation.ROTATED_RIGHT);

【问题讨论】:

您的 AIR SDK 版本是多少?两年前,我在开发通用手机/平板电脑应用程序时遇到了很多方向问题,手机垂直布局,平板电脑水平布局。从那以后,我不再搞乱动态方向,而是坚持在应用程序描述中定义的静态方向,但我已经在各种 AIR SDK 发行说明中看到了几次关于方向的错误修复 AIR 18.0。我只想将方向锁定为横向(仍然在rotatedRight和rotatedLeft之间变化),但只是在application.xml中指定并不能解决问题,所以我求助于手动检测方向变化。 由于发布的代码有错误,我现在需要删除我的答案。 un 删除了我的答案并更改了其内容。 【参考方案1】:
    <autoOrients>true</autoOrients>
    <aspectRatio>landscape</aspectRatio>

应该是通往 gay 的方式,它一直对我们有用,但我们没有发布使用此设置和 air sdk 18 的应用

因为它似乎对您不起作用,您可以尝试动态方式作为解决方法,就像我们在通用构建中使用的那样(在预加载器框架中检测设备 iphone/ipad,应用正确的方向,实例化正确的主类) ,在旧设备/操作系统版本上测试

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

并尽快调用stage.setAspectRatio(StageAspectRatio.LANDSCAPE);,这意味着就在您的主或预加载器类构造函数中

【讨论】:

这类似于我在问题末尾提到的解决方案。它成功设置为横向旋转右,但是当我旋转我的设备时它不会在旋转右和旋转左之间切换,它卡在固定的旋转右上。知道是什么原因造成的吗? 我想提一下,其他应用程序在我的设备上可以很好地旋转。【参考方案2】:

如果您只想锁定横向模式,那么首先在 XML 描述中将 aspectRatio 设置为横向,将 autoOrient 设置为 true,然后在代码中执行:

stage.setAspectRatio(StageAspectRatio.LANDSCAPE);
stage.autoOrients = true;

并且设备不会通过纵向。

【讨论】:

与我在帖子中指定的情况类似,由于某种原因它不起作用。应用以纵向打开,stage.orientation 返回“rotatedRight”。 与其一直尝试让它与您的整个项目一起工作,只需将一个简单的空应用程序放在一起并尝试使用它。众所周知,Starling 非常具有侵入性,因此很可能是 Starling 造成了这种混乱。 您可以通过快速搜索starling 的来源看到它根本不处理方向。无论如何,我创建了一个干净的项目进行测试,只有这段代码 - 我得到了完全相同的结果。

以上是关于StageOrientationEvent.ORIENTATION_CHANGING 未调度的主要内容,如果未能解决你的问题,请参考以下文章