在使用钛检测方向时,我有一些奇怪的行为。
代码
这是我在 index.js
上使用的代码:
// Start code
Ti.API.info('Orientation: ' + Ti.Gesture.orientation);
Ti.API.info('Portrait: ' + Ti.Gesture.portrait);
Ti.API.info('Landscape: ' + Ti.Gesture.landscape);
Ti.API.info(Ti.Platform.displayCaps.platformWidth + ' x ' + Ti.Platform.displayCaps.platformHeight);
// Code when orientation changes
Ti.Gesture.addEventListener('orientationchange',function(e) {
Ti.API.info('orientation changed!');
Ti.API.info('Orientation: ' + e.orientation);
Ti.API.info('Portrait: ' + e.source.isPortrait());
Ti.API.info('Landscape: ' + e.source.isLandscape());
Ti.API.info(Ti.Platform.displayCaps.platformWidth + ' x ' + Ti.Platform.displayCaps.platformHeight);
});
初始
- 我在 Nexus 6 上使用 Andriod 模拟器。
- 我从
0 度
(正常纵向位置)开始应用程序。
程序启动时我得到以下输出:
Orientation: 1 (Same as Ti.UI.PORTRAIT)
Portrait: true
Landscape: false
1440 x 2392
90度
将手机旋转到90 度
位置时,甚至不会触发该事件! 为什么不呢?
180度
再次顺时针旋转到 180 度
位置会触发事件并在控制台上给出以下正确值:
orientation changed!
Orientation: 4 (Same as Ti.UI.LANDSCAPE_RIGHT)
Portrait: false
Landscape: true
2392 x 1440
(请注意,尽管手机在技术上是纵向的,但由于手机的方向是错误的,因此应用程序会以横向显示。这是 Android 的预期行为)
270度
再次顺时针旋转到 270 度
位置会触发事件并给出以下正确值:
orientation changed!
Orientation: 4 (Same as Ti.UI.LANDSCAPE_RIGHT. Should be Ti.UI.LANDSCAPE_LEFT?)
Portrait: false
Landscape: true
2392 x 1440
0度
但是,当再次顺时针旋转时(回到 0 度
),我得到了不正确的值:
orientation changed!
Orientation: 2 (Same as Ti.UI.UPSIDE_PORTRAIT)
Portrait: false
Landscape: true
2392 x 1440
注意如何:
- 它声称在应该是纵向模式时处于横向模式
e.orientation
似乎给出了Ti.UI.UPSIDE_PORTRAIT
的半正确结果,而它应该是Ti.UI.PORTRAIT
.没什么大不了的。- 宽度和高度被翻转了(可能是因为它认为它仍然是横向的)!
问题
- 为什么第一次轮换没有触发事件!
- 为什么最后一次旋转显示的所有值都不正确。
最佳答案
在 orientationchange
监听器中,如果您检查 e.orientation
并将其与正常方向常量(Ti.UI.PORTRAIT, Ti.UI.UPSIDE_PORTRAIT、Ti.UI.LANDSCAPE_LEFT、Ti.UI.LANDSCAPE_RIGHT
)。
这是因为还有其他方向(FACE_DOWN、FACE_UP
),有一次我疯狂地试图理解为什么我的一些客户有时会注意到一些“闪烁”(从 FACE_DOWN
到 FACE_UP
)。
此外:使用真实设备测试您的监听器,因为在模拟器中测试orientationchange
事件几乎完全没有用。
关于android - 钛/Appcelerator 合金无法正确检测方向变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42927033/