这不是一个完整的答案,但我确实开发了一个记录旋转数据的测试,并想在此处发布(对收集的数据进行一般分析),以便其他人可以想出更好的方法来测试它或分析数据,欢迎他们参与。
对于测试,我将以下 javascript 代码放在一个 <script> 标记内,该标记位于一个框架 HTML 文档中:
var ax, ay, az;
window.addEventListener("devicemotion", function(e) { // DO NOT PUT ALERTS IN THIS LISTENER BLOCK!!
ax = e.accelerationIncludingGravity.x;
ay = e.accelerationIncludingGravity.y;
az = e.accelerationIncludingGravity.z;
}, false);
window.addEventListener("orientationchange", function() {
orient = Math.abs(parseInt(window.orientation)); // returns positive integer value of device orientation
// It's worth noting that on an iPad, the orientationchange event does not
// fire until after the rotation has already taken place, so a value of 0 or
// 180 corresponds to the accelerometer values for a Landscape-Portrait
// rotation, while a value of 90 corresponds to the accelerometer values for
// a Portrait-Landscape rotation event.
ax = Math.abs(ax);
ay = Math.abs(ay);
az = Math.abs(az);
//I put an ajax call here that sends orient, ax, ay and az as $_POST data to a PHP document
}, false);
这是该 PHP 文档中的相关 PHP 代码:
<?php
//I stored my $_POST variables as $orient, $ax, $ay, and $az for consistency
$XYangle = rad2deg(atan($ay/$ax));
$XZangle = rad2deg(atan($az/$ax));
$YZangle = rad2deg(atan($az/$ay));
//tab-delimit the data and enter it into a .txt file that can be imported into Excel for "easy" reading and sorting
$string = $orient."\t".$ax."\t".$ay."\t".$az."\t".$XYangle."\t".$XZangle."\t".$YZangle."\n";
//Open file and write $string to file
?>
设置好之后,我拿起 iPad,在我能想到的尽可能多的方向(相对于重力)上缓慢旋转了数百次。然后,我将记录的数据导入 Excel 文件,并以各种方式对其进行排序,直到开始出现趋势。
你问这些趋势是什么?我的分析是初步的,并不一定能解释在我看来像异常值的东西,但它看起来像:
仅当 XYangle < 28 时才会发生纵向-横向旋转事件。但是,随着 az 值的增加(您将 iPad 相对于地面变平),看起来 XYangle 必须减小。似乎 az 越接近 9.8,旋转事件就越难以预测。
仅当 XYangle > 45 时才会发生 Landscape-Portrait 旋转事件。同样,随着 az 值的增加,XYangle 也必须增加。此外,随着 az 接近 9.8,旋转事件变得难以预测。
我希望这可以为某人提供更好的测试和更好的分析的良好起点。我打算在 iOS 旋转错误修复中使用这些数据,类似于 Scott Jehl 在这里所做的:https ://github.com/scottjehl/iOS-Orientationchange-Fix ,到目前为止我已经很好地使用了它,但它仍然不是一个非常干净的解决方案,尤其是当用户将移动设备展平时。
我希望我的分析遗漏了一些东西,一个更细心的人可以用来微调轮换事件的可预测性。