0

Я разрабатываю приложение для ipad и iphone с использованием Titanium. Вы можете перемещаться между различными видами. 1-й вид (основной вид, где вы можете перейти на другие виды) будет только в портретном режиме, остальные виды могут быть в любой ориентации.Titanium - Изменение ориентации между окнами

Для этого я использую различные окна:

var winPortrait = Ti.UI.createWindow({ 
    orientationModes : [Ti.UI.PORTRAIT], 
    fullscreen : false, 
    navBarHidden : true, 
    backgroundColor : "#00669c", 

}); 

var appWindow = Titanium.UI.createWindow({ 

    width : Ti.UI.FILL, 
    height : Ti.UI.FILL, 
    fullscreen : false, 
    navBarHidden : true, 
    backgroundColor : "#00669c", 
    backgroundImage : "Default-Portrait.png", 
    orientationModes : [Ti.UI.PORTRAIT, Ti.UI.LANDSCAPE_LEFT, Ti.UI.LANDSCAPE_RIGHT] 
}); 

Это работает нормально. Когда я открываю каждое окно, изменения ориентации работают нормально.

Чтобы объяснить мою проблему, я собираюсь указать шаги, которые я делаю, чтобы воспроизвести ее.

  • Я просмотра экрана на ландшафте: enter image description here

  • Я нажмите, чтобы перейти на главный экран (портрет только) с устройством в ландшафте.

  • Основной вид показан в портретном режиме.
  • Я поворачиваю устройство к портрету.
  • я снова перейти к просмотру с устройством в портретном:

enter image description here

  • Если изменить ориентацию устройства, я получаю событие изменения ориентации, приложение определяет, является ландшафтным режимом и использовать элементы, как пейзаж , но окно или вид (я не знаю) его рисунок как портрет, так что это не правильно настроить:

enter image description here

Это не происходит на КСН 7, но когда я попытался с прошивкой 5.1, это происходит (я не иметь устройство с прошивкой 6.x попробовать)

Вы знаете, как можно Я решаю это или это проблема?

спасибо.

UPDATE

Это упрощение кода я использую:

В app.js:

var appWindow = Titanium.UI.createWindow({ 

     width : Ti.UI.FILL, 
     height : Ti.UI.FILL, 
     fullscreen : false, 
     navBarHidden : true, 
     backgroundColor : "#00669c", 
     backgroundImage : "Default-Portrait.png", 
     orientationModes : [Ti.UI.PORTRAIT, Ti.UI.LANDSCAPE_LEFT, Ti.UI.LANDSCAPE_RIGHT] 
    }); 

var winPortrait = Ti.UI.createWindow({ 
    orientationModes : [Ti.UI.PORTRAIT], 
    fullscreen : false, 
    navBarHidden : true, 
    backgroundColor : "#00669c", 

}); 

var openView = function(e) { 

    currentView = e.win; 

    if (winPortraitHomeOpened && e.win != 'Home') { 
     appWindow.backgroundImage = ''; 
     appWindow.addEventListener('open', function() { 
      //alert("appwindowopen") 
      if (appWindow != null) { 
       appWindow.height = Ti.UI.FILL; 
       appWindow.width = Ti.UI.FILL; 
      } 
     }); 
     appWindow.open(); 

    } 

    // Dependiendo de la vista, abre una ventana u otra 
    if (e.win == 'Home') { 

     winPortrait.open(); 

     winPortraitHomeOpened = true; 

     setTimeout(function() { 
      var Home = require('/views/Home2'); 
      activeView = Home.Constructor(winPortrait); 
      addActiveViewCloseWin(); 
     }, 10); 

    } else if (e.win == 'test') { 
     var Test = require('/views/test/test'); 
     activeView = Test.Constructor(appWindow, true); 
    } 

    if (currentView != 'Home') { 
     addActiveViewCloseWin(); 
    } 

}; 

var addActiveViewCloseWin = function() { 
    var anim_invisible = Titanium.UI.createAnimation({ 
     opacity : 0, 
     duration : 300 
    }); 
    var anim_visible = Titanium.UI.createAnimation({ 
     opacity : 1, 
     duration : 300 
    }); 

    if (winPortraitHomeOpened && currentView == 'Home') { 
     winPortrait.add(activeView); 
    } else { 
     appWindow.add(activeView); 
    } 

    if (lastActiveView != null) { 
     Trace.info("lastActiveView != null"); 
     lastActiveView.animate(anim_invisible); 

     setTimeout(function() { 

      activeView.animate(anim_visible); 
      lastActiveView.close(); 

      lastActiveView = activeView; 
     }, 300); 
    } else { 
     activeView.animate(anim_visible); 
     lastActiveView = activeView; 
    } 
    activeView.updateOrientation(); 

    setTimeout(function() { 
     if (currentView == 'Home') {    
      appWindow.close();   
     } else { 
      if (winPortraitHomeOpened) { 
       winPortrait.close(); 
       winPortraitHomeOpened = false; 
      } 
     } 
    }, 500); 
}; 

Ti.Gesture.addEventListener('orientationchange', function(e) { 

    // Comprobar que ha cambiado de orientación. Se envían varios eventos juntos 
    var _currentOrientacion = 0; 
    if (utils.isLandscape()) 
     _currentOrientacion = 1; 

    if (_currentOrientacion == orientacion) { 
     return; 
    } 

    orientacion = _currentOrientacion; 


    // Se actualiza las dimensiones y la orientación de los elementos 
    if (!winPortraitHomeOpened && !winPortraitConfOpened) { 
     if (appWindow != null) { 
      appWindow.height = Ti.UI.FILL; 
      appWindow.width = Ti.UI.FILL; 
     } 
    } 

    if (activeView != null) { 
     activeView.updateOrientation(); 
    } 
}); 

Код Test.js:

exports.Constructor = function(parent) { 

    var view = Ti.UI.createView({ 
     height : utils.getScreenHeight(), 
     width : utils.getScreenWidth(), 
     backgroundColor : 'red' 
    }); 

    var cabeceraView = Cabecera.Constructor(view); 
    view.add(cabeceraView); 
    cabeceraView.setTitle('Prueba'); 

var backButton = Ti.UI.createImageView({ 
    image : utils.imagesFolder() + "common/returnHome.png", 
    //top : view.height/4, 
    left : utils.todp(8), 
    height : utils.todp(25), 
    width : utils.todp(65) 
}); 

    view.add(backButton); 

backButton.addEventListener('click', function() { 
      openView({ 
       win : 'Home' 
      }); 
     }); 


    var updateFechaCabecera = function() { 
     fechaView.setFecha('XXXX-XX-XX'); 
    }; 
    view.updateFechaCabecera = updateFechaCabecera; 

    var fechaView = Fecha.Constructor(view); 
    view.add(fechaView); 

    updateFechaCabecera(); 

    // Vista ocupa todo salvo cabecera y fecha 
    var mainView = Ti.UI.createView({ 
     height : utils.getScreenHeight() - utils.getCabeceraHeight() - utils.getFechaHeight(), 
     width : '100%', 
     top : utils.getCabeceraHeight() + utils.getFechaHeight(), 
     backgroundColor : "transparent", 
    }); 
    view.add(mainView); 

    // Create a Label. 
    var aLabel = Ti.UI.createLabel({ 
     text : 'aLabel', 
     color : 'pink', 
     font : { 
      fontSize : 40 
     }, 
     textAlign : 'center' 
    }); 

    // Add to the parent view. 
    mainView.add(aLabel); 

    var updateOrientation = function() { 

     Trace.info("updateOrientation de interconexines height width " + utils.getScreenHeight() + ' ' + utils.getScreenWidth()); 
     view.height = utils.getScreenHeight(); 
     view.width = utils.getScreenWidth(); 

     if (utils.isPortrait()) { 
      aLabel.text = "PORTRAIT"; 
     } else { 
      aLabel.text = "LANDSCAPE"; 
     } 

    }; 
    view.updateOrientation = updateOrientation; 


    var cerrar = function() { 
     Trace.info('cerrar Template'); 

     view.visible = false; 
     view.hide(); 

     if (cabeceraView != null) { 
      cabeceraView.close(); 
      view.remove(cabeceraView); 
      cabeceraView = null; 
     } 

     if (fechaView != null) { 
      fechaView.close(); 
      view.remove(fechaView); 
      fechaView = null; 
     } 

     // Eliminamos los elementos de la vista 
     if (view != null) { 
      utils.removeChildrens(view); 
      parent.remove(view); 

     }; 
     view = null; 

    }; 
    view.close = cerrar; 

    return view; 

}; 
+0

возможного дубликат http://stackoverflow.com/questions/21873547/orientation-portrait-and-portraitupsidedown-only-for-one-window – Anand

+0

я могу используйте разные ориентации в разных окнах. Моя проблема в том, что я переключаюсь между этими окнами, и я играю с ориентацией устройства (физически).Спасибо –

+0

В событии изменения ориентации вы удаляете свой просмотр и перестраиваете его или позволяете ему обрабатывать настройки автоматически? Я попытался бы удалить весь вид в событии ориентации и вызвать функцию, которая снова создает представление и добавляет его в окно. Если вы могли бы привести пример кода на один файл, который обнаружил бы проблему, я мог бы протестировать его в своей системе. Ваш пример хорош, я просто не хочу писать приложение макета, чтобы его проверить. Это моя проблема с титаном или ОС в частности. – Martin

ответ

0

Вы пытались удалить orientModes в var winPortrait? Вашего код должен выглядеть следующим образом:

var winPortrait = Ti.UI.createWindow({ 
    fullscreen : false, 
    navBarHidden : true, 
    backgroundColor : "#00669c", 

}); 
+0

Но я хочу разрешить только портретную ориентацию в этом окне (домашнее окно), а в другом окне - любые ориентации. Поэтому, я думаю, я должен это выразить. спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^