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 未调度的主要内容,如果未能解决你的问题,请参考以下文章