使用钛探测方向时,我有一些奇怪的行为。
这是我在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);
});
0 degrees
开始关闭应用程序(正常人像位置)。程序启动时我得到以下输出:
Orientation: 1 (Same as Ti.UI.PORTRAIT)
Portrait: true
Landscape: false
1440 x 2392
在90 degrees
位置旋转手机时,事件甚至没有触发! 为什么不呢?
再次顺时针旋转到180 degrees
位置会触发事件并在控制台上显示以下正确值:
orientation changed!
Orientation: 4 (Same as Ti.UI.LANDSCAPE_RIGHT)
Portrait: false
Landscape: true
2392 x 1440
(请注意,即使手机在技术上处于纵向状态,但应用程序会显示在风景中,因为手机的方式是错误的。这是预期的Android行为)
再次顺时针旋转到270 degrees
位置会触发事件并提供以下正确值:
orientation changed!
Orientation: 4 (Same as Ti.UI.LANDSCAPE_RIGHT. Should be Ti.UI.LANDSCAPE_LEFT?)
Portrait: false
Landscape: true
2392 x 1440
然而,当再次顺时针旋转(返回0 degrees
)时,我得到的值不正确:
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
时给出了半正确的结果。activityQuery
没什么大不了的。答案 0 :(得分:3)
在orientationchange
监听器内部,如果检查e.orientation
并将其与常规方向常量(Ti.UI.PORTRAIT, Ti.UI.UPSIDE_PORTRAIT, Ti.UI.LANDSCAPE_LEFT, Ti.UI.LANDSCAPE_RIGHT
)进行比较,可能会更好。
这是因为还有其他方向(FACE_DOWN, FACE_UP
),一旦我疯狂地试图理解为什么我的一些客户有时会注意到一些“闪烁”(从FACE_DOWN
移动到{{1} })。
此外:使用真实设备测试您的听众,因为在模拟器中测试FACE_UP
事件几乎完全没用。