【发布时间】:2017-03-21 12:21:51
【问题描述】:
在使用钛检测方向时,我有一些奇怪的行为。
代码
这是我在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 degrees(正常纵向位置)启动应用程序。
程序启动时我得到以下输出:
Orientation: 1 (Same as Ti.UI.PORTRAIT)
Portrait: true
Landscape: false
1440 x 2392
90 度
将手机旋转到90 degrees 位置时,甚至不会触发事件! 为什么不呢?
180 度
再次顺时针旋转到180 degrees 位置确实会触发事件并在控制台上给出以下正确值:
orientation changed!
Orientation: 4 (Same as Ti.UI.LANDSCAPE_RIGHT)
Portrait: false
Landscape: true
2392 x 1440
(请注意,尽管手机在技术上是纵向的,但应用程序会以横向显示,因为手机的方向是错误的。这是预期的 Android 行为)
270度
再次顺时针旋转到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度
但是,当再次顺时针旋转时(回到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。没什么大不了的。 - 宽度和高度已经翻转(可能是因为它认为它仍然是横向的)!
问题
- 为什么第一次轮换没有触发事件!
- 为什么最后一次旋转显示所有值的值都不正确。
【问题讨论】:
标签: android titanium appcelerator appcelerator-titanium titanium-alloy