0

好的,我现在正在为 iOS 构建一个 Flex Mobile 项目。它是使用 ANE(本机扩展)的原型视频播放器。稍后将在更大的项目中使用视频播放器。

现在,我遇到的问题是大小和定位,我相信问题是因为我为项目设置了 160 的 applicationDPI。

这是正在发生的事情。ANE 本质上是一个美化的 StageWebView,它内置了大量的额外功能,并且不提供 GUI(主要使用 StageWebView)。该项目位于 StageWebView 等全局空间中,无论我尝试什么,我都无法正确定位和调整大小。从本质上讲,这是决定播放器大小和位置的原因

this.height = 50% of stage
this.width = 50% of stage
this.globalPoint:Point = this.localToGlobal(new Point(0,0));

this.viewPort = new Rectangle (this.globalPoint.x,this.globalPoint.y,this.width,this.height - 35); //35 = height of controls
this.videoPlayer = new VideoPlayer(this.stage,this.viewPort); //VideoPlayer(stage:Stage,viewPort:Rectangle)

现在,在我看来,这看起来很完美。它不在显示列表中,但对最终用户来说,它看起来就像是。它会一直粘在父类的 0,0 上(当然,在 Resize 函数的帮助下),视频将是适当区域的大小。

我错了。在我的 Retina iPad 上,它的位置很远,而且尺寸要大得多。在收集了大量数据并进行数学运算后,我发现了一个常数 4/3,一切似乎都偏离了。iPad 的 DPI 变化是 3/2 (160 -> 240),所以我认为这不是问题。

我还想出了这个简单的方程式来补偿 DPI 偏移。

newValue = (oldValue / (DeviceManager.applicationDPI / FlexGlobals.topLevelApplication.applicationDPI) ); //DeviceManager.applicationDPI is a static getter that returns either 160, 240, or 320 based on Adobe's predefined ranges

我还没有在 iPad 1/2 或 iPhone 上测试过这个,但我担心我的魔法常数实际上只是被考虑的纵横比。

有谁知道为什么定位都搞砸了?这不是 localToGlobal,因为即使手动输入本应有效的值也会导致灾难。

4

0 回答 0