Phonegap 2.2.0 - 检测方向

时间:2013-01-14 23:15:54

标签: javascript ios cordova

我有一个应用程序,我想保持纵向模式,除了我想要检测方向更改的单个视图,触发js事件并更改方向(仅适用于该视图)。

我的应用中有以下代码:

   window.shouldRotateToOrientation = function(rotation) {
     switch (rotation) {        
       case 0:
       case 180:
        console.log("Portrait");
        return false;
        //LandscapeRight or LandscapeLeft
       case 90:
       case -90:
        console.log("Landscape");
        return false;
     }
  }

当为iOS5构建时,这似乎工作正常,通过返回false使应用程序保持纵向方向,并在设备处于横向模式时正确触发。但是,当为iOS6构建时,每次设备旋转时,该函数被调用4次,匹配每种情况 - 使检测变得无用。

我是否正确地接近了这个问题 - 还有另外一种方式或者是否有某些我缺失的东西?

请注意,我对XCode / ios / ObjectiveC环境的理解非常有限

2 个答案:

答案 0 :(得分:2)

试试这段代码:

function changeOrientation() {
    switch (window.orientation) {
        case 0:
            // portrait, home bottom
        case 180:
            // portrait, home top
            alert("portrait H: " + $(window).height() + " W: " + $(window).width());
            break;
        case -90:
            // landscape, home left
        case 90:
            // landscape, home right
            alert("landscape H: " + $(window).height() + " W: " + $(window).width());
            break;
    }
}

window.onorientationchange = function () {
    //Need at least 800 milliseconds
    setTimeout(changeOrientation, 1000);
}

超时应解决问题。

答案 1 :(得分:0)

以下是检测方向的原因:

function isOrientationPortrait(){
  if ($(window).height() > $(window).width()){ 
    return true; 
  } else { 
    return false; 
  }
}

$(window).on('orientationchange', function () {
  if(isOrientationPortrait()){
    console.log("Portrait");
  } else {
    console.log("Landscape"); 
  }
});