Titanium:应用程序锁定为纵向,但相机旋转,如何确定实际设备方向?
Titanium: App locked to portrait, yet camera rotates, how to determine actual device orientation?
Appcelerator Titanium 应用程序,具体询问 Android
我们的应用被锁定为纵向模式:
android:screenOrientation="nosensor"
在 tiapp.xml
- 所有 windows 已设置
orientationModes: [Ti.UI.Portrait]
然而,当我们显示相机(带有覆盖层)时,允许旋转。这意味着用户照片最终可能会横向或上下颠倒。不幸的是,由于该应用程序被锁定为纵向模式,Ti.Gesture.orientation
和 myWindow.orientation
始终 returns 1(纵向),因此我们无法手动取消旋转图像。
我如何才能 a) 锁定相机的方向,或 b) 找到实际的设备方向以便我可以手动取消旋转图像?
答案是使用加速度计。
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
侦听器。
Appcelerator Titanium 应用程序,具体询问 Android
我们的应用被锁定为纵向模式:
android:screenOrientation="nosensor"
在 tiapp.xml- 所有 windows 已设置
orientationModes: [Ti.UI.Portrait]
然而,当我们显示相机(带有覆盖层)时,允许旋转。这意味着用户照片最终可能会横向或上下颠倒。不幸的是,由于该应用程序被锁定为纵向模式,Ti.Gesture.orientation
和 myWindow.orientation
始终 returns 1(纵向),因此我们无法手动取消旋转图像。
我如何才能 a) 锁定相机的方向,或 b) 找到实际的设备方向以便我可以手动取消旋转图像?
答案是使用加速度计。
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
侦听器。