Flex 4.5移动iOS问题,确定实际的屏幕/阶段分辨率
我有一个相当大的问题.我希望这是由于我自己的愚蠢,而不是某种错误.我有需要知道屏幕尺寸的代码.我还没有找到一种可行的方法.在iPad 2和iPhone4 / iPod Touch 4 iOS设备上使用Flash Builder 4.5的生产版本.一般来说,我的应用程序运行良好但我无法确定程序启动时的屏幕大小和方向.让我解释一下我遇到的问题:
在进入“init”函数时,由ADDED_TO_STAGE事件调用的函数,stage.stageHeight和stage.stageWidth的值都为0. 我可以查询Capabilities.screenResolutionX和Capabilities.screenResolutionY,但它们是错误的.它们具有原始X和Y值,但不管方向如何.所以例如我通过screenResolutionX以横向模式开始包含768(或其他)而不是1024. 我查看stage.width和stage.height的值,它们没有有效值. 我有一个针对EVENT.RESIZE的onResize函数设置,但是如果应用程序在已经处于横向模式时从设备启动时它不会被调用.如果我以纵向模式启动应用程序然后旋转,则会调用它. 所以我的问题是我应该在应用程序启动时查询应该知道应用程序的真实宽度和高度.必须有办法做到这一点,但显然不使用上述任何方法! 顺便说一句,这是在iOS设备上.我不能说它如何在别人身上发挥作用.我已经通过打印结果并在调试器中运行它来确认这些结果. 解决方法
我以前遇到过stageWidth和stageHeight在启动时没有立即提供正确值的问题,解决这个问题的一个简单方法是在检查之前等待一两帧.
一种选择是延迟应用程序的初始化,类似于以下内容: private var _startup_delay:int = 10; public function Constructor(){ addEventListener(Event.ENTER_FRAME,handleEnterFrame); } public function handleEnterFrame(e:Event):void{ _startup_delay--; if(_startup_delay <= 0){ init(); removeEventListener(Event.ENTER_FRAME,handleEnterFrame); } } 另一个选择是调度假的resize事件,并在延迟过去后让你的前一个旋转代码处理它: public function handleEnterFrame(e:Event):void{ _startup_delay--; if(_startup_delay <= 0){ stage.dispatchEvent(new Event(Event.RESIZE)); removeEventListener(Event.ENTER_FRAME,handleEnterFrame); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |