钛:应用程序锁定为纵向,但相机旋转,如何确定实际的设备方向?

时间:2016-05-19 14:44:51

标签: titanium titanium-mobile appcelerator-titanium

Appcelerator Titanium app,专门询问Android

我们的应用已锁定为纵向模式:

  • android:screenOrientation="nosensor"位于tiapp.xml
  • 所有窗口都设有orientationModes: [Ti.UI.Portrait]设置

然而,当我们显示相机(带有覆盖层)时,它可以旋转。这意味着用户照片可能会侧身或颠倒。不幸的是,由于应用已锁定为纵向模式,Ti.Gesture.orientationmyWindow.orientation始终返回1(纵向),因此我们无法手动对图像进行反转。

我怎样才能a)锁定相机的方向,或b)找到实际的设备方向,以便我可以手动反转图像?

1 个答案:

答案 0 :(得分:0)

答案是使用加速度计。

function accelerometerCallback(e) {
  var deviceOrientation;
  // Get the current device angle
  var xx = -e.x;
  var yy = e.y;
  var angle = Math.atan2(yy, xx);

  if (angle >= -2.25 && angle <= -0.75) {
    deviceOrientation = "portraitUpsideDown";
  } else if (angle >= -0.75 && angle <= 0.75) {
    deviceOrientation = "landscapeRight";
  } else if (angle >= 0.75 && angle <= 2.25) {
    deviceOrientation = "portrait";
  } else if (angle <= -2.25 || angle >= 2.25) {
    deviceOrientation = "landscapeLeft";
  }

  console.log('ACCELEROMETER: orientation = ' + deviceOrientation);
}

Ti.Accelerometer.addEventListener('update', accelerometerCallback);

myWin.addEventListener('close', function () {
  Ti.Accelerometer.removeEventListener('update', accelerometerCallback);
});

请记住,加速计听众每秒钟会发射数百次,这是电池的另一种消耗。请务必尽快删除update侦听器。