【问题标题】:Titanium/ Appcelerator Alloy not detecting orientation change correctly钛/ Appcelerator 合金未正确检测方向变化
【发布时间】: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。没什么大不了的。
  • 宽度和高度已经翻转(可能是因为它认为它仍然是横向的)!

问题

  1. 为什么第一次轮换没有触发事件!
  2. 为什么最后一次旋转显示所有值的值都不正确。

【问题讨论】:

    标签: android titanium appcelerator appcelerator-titanium titanium-alloy


    【解决方案1】:

    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 事件几乎完全没用。

    【讨论】:

    • 这并不能解释为什么在第一次轮换时甚至没有触发事件。它也没有解释为什么宽度和高度在最后一次旋转时是错误的。
    • @YahyaUddin 尝试一下我建议你的方法。忘记 isPortrait 和 isLandscape 方法。
    • 但我已经有了。看问题。这是Ti.API.info('orientation changed!'); 下方事件处理程序的第二行。我还编辑了问题以使其更清晰。这不会改变事件甚至不会在第一次轮换时触发的事实!
    • @YahyaUddin 我从来没有遇到过这个问题,所以我不知道,但是在删除我的答案之前,我建议您使用物理设备测试您的orientationchange 监听器,否则不可能发现由模拟器上不可用的方向。
    • 嗯,它似乎在真实设备上运行良好。应该是模拟器的问题。我该如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多