Corona SDK在iPhone上返回错误的system.orientation值?

3
我注意到在启动应用程序时,system.orientation会给出iPhone5S上在build.settings中定义的默认方向。我的测试代码在iPad2和iPadMini上得到了正确的答案,但在iPhone5S上无论应用程序以哪种方向启动,我都会得到build.settings的默认设置。有什么提示或想法吗?
build.settings
orientation = {
    default = "portrait",
supported = {
  "landscapeLeft", "landscapeRight", "portrait", "portraitUpsideDown"
}

main.lua

print ( system.orientation ) -- gives wrong answer on iphone5S but not ipad2 or ipad Mini ?

我以打印为例,实际上是将字符串发送到设备屏幕。
我基本上必须旋转5S才能开始获取正确的方向细节,默认情况下它总是显示“纵向”。可以想象,在iPhone 5S上运行我的应用程序时,这很让人恼火。
使用版本:构建版本2013.2100(2013.12.7)

你尝试过使用方向监听器吗?可以参考http://docs.coronalabs.com/api/event/orientation/index.html。这样,无论系统.orientation如何,至少你可以重建你的场景。 - Oliver
是的,这是初始方向在iPhone5S上只有iOS 7.05会得到错误结果。我无法正确构建场景,因为没有事件叫做方向未改变。然而,系统方向具有无效结果,不是当前方向。 - Aardvark
啊,是的,那么可能是在您的代码检查时变量尚未初始化吗?看看是否可以延迟检查它,也许使用计时器事件,也许一两秒后它会被正确设置。 - Oliver
不太正规,考虑到它可以在其他基于iOS的设备上工作,对我来说看起来是7.05或5S的问题。 - Aardvark
我也认为这是一个特定于该平台的问题,问题在于你是否想要一个解决方法。在我看来,计时器的想法很好,几乎不算是hack:它可以在所有平台上工作,并且不会因升级而停止工作,如果你做得对,它可以通过注释掉一行代码轻松地删除,甚至只能用于该平台(假设Corona有一个平台识别标签,你可以查询)。 - Oliver
1个回答

0

好的,明白了。

iPad 可以信任 system.orientation ... 但是 iPhone 必须等待第一次 "orientation" 更改发生后才能信任它!!假设您的代码中有一个 deviceType,类似于这样的东西就可以工作了,

if (deviceType.isApple and not deviceType.is_iPad) then
    system.setAccelerometerInterval(100)   -- Make sure we capture first orientation change by ramping up the sample to 100Hz
    Runtime:addEventListener("orientation", initialOrientationSet) -- capture this first change
else
  -- Launch your app
end

在 initialOrientationSet 内执行以下操作:
function initialOrientationSet ()
  Runtime:removeEventListener("orientation", initialOrientationSet)
  system.setAccelerometerInterval (10) -- save some battery power
  -- Launch you app
end

还有,您需要测试模拟器并正常启动。

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接