2013-03-11 5 views
1

Ok, je me suis écrit une classe DeviceCapabilites simple pour être en mesure de vérifier si l'appareil est un téléphone ou une tablette, etc.AS3/AIR: Si le téléphone utilise le mode portrait, si la tablette utilise le mode paysage?

Mais je dois pouvoir dire que si l'utilisateur est sur un téléphone, il devrait être en mode portrait, et si sur tablette je veux seulement utiliser le mode paysage ... Des idées?

EDIT: Pour clarifier, je veux verrouiller l'orientation en mode portrait sur les téléphones, puis utiliser paysage sur les tablettes.

Répondre

3

Quelque chose comme ça?

stage.autoOrients = false; 

if(YourDeviceCapsClass.isTablet) 
    stage.setOrientation(StageOrientation.ROTATED_LEFT); 
else 
    stage.setOrientation(StageOrientation.DEFAULT); 
+0

Cela ne les aidera pas. 'StageOrientation.DEFAULT' est lié à la valeur par défaut de l'appareil. généralement bien pour les téléphones, puisque presque tous les téléphones devraient être portrait par défaut, certaines tablettes sont en réalité paysage par défaut (le Asus Transformer Prime en est un, je crois) –

+0

'stage.deviceOrientation' pourrait aider? –

+0

Non,' deviceOrientation' (et 'orientation') semblent rapporter exactement la même information et s'appuyer sur les mêmes constantes StageOrientation.Vous avez toujours besoin de la logique supplémentaire de ma réponse pour déterminer si le défaut est paysage ou portrait –

1

Vous devrez combiner la méthode setOrientation() mentionne par Barış Uşaklı avec un peu plus logique, je crains. Comme je l'ai mentionné dans mon commentaire à lui, StageOrientation.DEFAULT se réfère à l'orientation par défaut de l'appareil, mais vous ne savez pas si c'est paysage ou portrait.

Heureusement, il existe un moyen simple de comprendre cela. Vous voyez simplement si l'appareil est dans l'orientation par défaut/à l'envers et vérifiez par rapport à la largeur/hauteur.

var defaultPositionIsLandscape:Boolean = false; 
if (stage.orientation == StageOrientation.DEFAULT || stage.orientation == StageOrientation.UPSIDE_DOWN) { 
    defaultPositionIsLandscape = stage.stageWidth > stage.stageHeight; 
} 
else { 
    defaultPositionIsLandscape = stage.stageWidth < stage.stageHeight; 
} 

if (isTablet) { 
    if (defaultPositionIsLandscape) { 
     stage.setOrientation(StageOrientation.DEFAULT); 
    } 
    else { 
     stage.setOrientation(StageOrientation.ROTATED_LEFT); 
    } 
} 

La logique est un peu désordonné et vous pourriez probablement le nettoyer un peu, mais qui est l'essence générale de ce qui doit arriver. Personnellement, je ferais de la partie supérieure un getter statique en lecture seule dans votre classe DeviceCapabilities pour faciliter l'accès. Vous aurez également besoin de l'agrandir pour éviter de tourner si elle est dans StageOrientation.UPSIDE_DOWN (puisque c'est techniquement l'orientation correcte que vous voulez, juste à l'envers)

+0

Merci, je vais essayer de vérifier ça une fois chez moi. – user2158208

0

Je n'ai pas de réponse mais j'aimerais sauver quelqu'un d'autre parfois. Lors d'un test sur un ipad, le code ci-dessus posté par Josh donnera toujours "defaultPositionIsLandscape" à false :(

Questions connexes