我在让我的 iOS 应用程序使用横向模式时遇到问题。我是 phonegap、iOS、mac 和大部分这些东西的新手,但我已经在网上搜索了几天,我需要帮助。
我正在使用 xcode 5,phonegap 2.3.0,我的目标是 iPhone iOS 7。
我有一个正在生产中的应用程序,我需要给它一些景观支持。在特定情况下,应该可以倾斜手机并获得更好的视野。
我找到了这段代码:
window.addEventListener('orientationchange', doOnOrientationChange,true);
function doOnOrientationChange(e)
{
alert('orientation event fire');
switch(e.orientation)
{
case -90:
case 90:
alert('landscape');
break;
default:
alert('portrait');
break;
}
}
我也可以使用 window.orientation 而不是 e.orientation。这似乎是处理这些东西的流行方式。
由于某种原因,仅当手机转动 180 并返回 0 时才会调用警报“定向事件触发”。在 90 或 -90 没有发生任何事件。
我在 xcode 中将支持的界面方向设置为所有 4 种可能性。在我的 index.html 中,我有:
<meta name="viewport" content="user-scalable=yes, width=device-width" />
我可以让应用程序以横向模式启动,但在应用程序运行后无法更改。它可以很好地变回纵向模式。
出于某种原因,手机没有告诉我它何时处于 90 和 -90。
我读到处理旋转的不是phonegap,而是phonegap使用的浏览器。这是我正在寻找的行为,因为我希望浏览器在手机倾斜时为我调整大小和旋转所有内容。
我也不愿意更新phonegap,因为我已经阅读了很多关于它在2.3.0版之后处理旋转错误的帖子
有任何想法吗 ??
编辑:
有时,只有在您在论坛上提出问题后,您才会得到答案。
我的问题是我公司的另一位开发人员添加了:
function shouldRotateToOrientation(interfaceOrientation) {
return app.shouldRotateToOrientation( interfaceOrientation );
}
到我的 index.js 文件。
显然,shouldRotateToOrientation 函数是 phonegap 将在代码中查找的函数,如果有,则限制屏幕旋转。
我尝试编写以下内容:
function shouldRotateToOrientation(interfaceOrientation) {
return true;//(1 === interfaceOrientation);
}
一切都很好......或者一件事仍然存在
下一个问题是找到当前方向。显然,传递给 shouldRotateToOrientation 的值将指示当前方向。(在我的例子中,interfaceOrientation)有些写 1 表示纵向,而 2,3,4 表示其他方向。有人写它返回 0、90、-90、180。(我发现最后一个在我的情况下是正确的。)但是它在每次方向移动时调用该函数 4 次。因此,将 console.log 放入函数中将导致每次手机倾斜时打印 4 行。在每种情况下,线条的打印顺序都是相同的,因此无法确定手机实际转动的方向。
有人将此作为解决方案:
function changeOrientation() {
console.log(window.orientation);
}
window.onorientationchange = function () {
//Need at least 800 milliseconds
setTimeout(changeOrientation, 800);
}
但这仅在屏幕实际改变方向时才调用,我需要一些东西来告诉我手机正在转动的方向,所以我可以决定是否允许改变方向。也有点烦人,应该等待 800 毫秒。
知道如何获取手机的当前实际方向。不是应用程序呈现的方向??
编辑: 我最终使用:
function shouldRotateToOrientation(newOrientation) {
return window.app.supportLandscape || !(interfaceOrientation%180);
}
为了限制屏幕,即使 newOrientation 值到处都是它仍然有效的地方。window.app.supportLandscape 是在我的代码中设置的,我想支持或不支持横向。!(interfaceOrientation%180) 部分允许我在所有情况下旋转回纵向。如果我进入一个允许横向的屏幕。我转动手机并进入横向模式。然后我按下后退按钮并返回到应该只处于纵向模式的页面。我在横向模式下看到此页面(无法帮助)我将手机调回纵向模式,屏幕现在再次处于纵向模式,并锁定到此模式。
我面临的下一个问题是设备上的横向屏幕没有重新渲染。图形会转动,但无法缩放以适应屏幕。只有当我使用 Archive 生成 .ipa 文件并通过 iTunes 部署它时,才会出现这种行为。当直接从 xcode 5 启动到设备或任何模拟器时,图形将适合在横向模式下缩放。
我发现一个帖子说问题是 xcode 使用不同的设置来生成 .ipa 文件,而不是启动代码。这是真的,因为 xcode 在启动时使用调试,在归档时使用发布。我试图将存档模式设置为使用调试但同样的问题。我试图将运行设置为释放,但它仍然工作正常。
有任何想法吗 ???