AIR には、デバイスの向きにあわせて画面内の表示を自動的に回転させる機能があります。これに関する仕様が、AIR 3.3 から変更されました。
この変更により、縦長表示のみ、横長表示のみ、という振る舞いの実現が容易になりました。画面の上下が逆になったときだけ表示が 180 度回転する、というアプリが簡単に実現できます。
具体的には、アプリケーション記述子の中で以下の設定を行います。 (もしくは、ActionScript で Stage オブジェクトの属性値を変更)
- autoOrients の値を true
- aspectRatio の値を landscape または portrate
AIR 3.3 からは、このように指定すると、表示の縦長/横長が固定されます。
AIR 3.2 までは、同様の指定だと、最初に表示される向きだけは aspectRatio の指定通りになるものの、その後は、デバイスの傾きに応じて、縦長の表示にになったり横長の表示にになったりしていました。 (ほとんど意味のない指定でした)
そのため AIR 3.2 までは、例えば、横長の表示だけにしたい場合には、上の設定に加えて、orientationChanging イベントの発生時に afterOrientation の値が PORTRAIT だったら preventDefault() を呼ぶ、という記述が要りました。
AIR 3.3 からは、こんな手間は不要です。
StageAspectRatio.ANY
もともと、縦長表示のみ、もしくは横長表示のみだったアプリでは、AIR 3.3 でパッケージし直す際に、この新しい仕様にあわせてコードを書き換える必要はありません。それは、preventDefault() を呼び出す行が実行されることは無いからです。
一方、デバイスの向きにあわせて、縦長の表示と横長の表示を使い分けていた、という人はこのままだと困ってしまいますよね。そこで新しい StageAspectRatio の値として ANY が追加されました。
以下の設定をすると、画面内の表示が 90 度ごと、デバイスの向きにあわせて回転します。
- autoOrients の値を true
- aspectRatio の値を any
この設定では、デバイスの持ち方 (置き方) によって、縦長の表示になったり横長の表示になったりします。AIR 3.2 以前で、autoOrients が true の時の標準の動作です。
なお、Stage.setAspectRatio() メソッドを使って、実行時に、自動回転の振る舞いを指定することも可能です。指定できる値は、LANDSCAPE, PORTRAIT, ANY です。
また、プログラムから明示的に表示する向きを指定したい場合は、従来と同様に Stage.setOrientation() が利用できます。
最後に、以上の新機能を使う場合、名前空間に 3.3 が指定されているか、コンパイル時の -swf-version に 16 が指定されているか、を確認しましょう。単に、AIR 3.3 SDK を使うだけでは不十分なのです。
コメントする