0

AIR 3.3 /FlashCS5.5を使用してiOSおよびAndroid用のアプリをプログラミングしています。ここで、iOSデバイスでアプリのサイズが変更されないという問題が発生しました(ipod touch 4でテスト)。

これが私のコードです:

        public function Main() {
            this.addEventListener(Event.ADDED , Init, false, 0, true);
        }

        private function Init(e:Event) {
            this.removeEventListener(Event.ADDED , Init);

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            stage.addEventListener(Event.RESIZE , Resize, false, 0, true);
        }

        private function Resize(e:Event) {
            stage.removeEventListener(Event.RESIZE, Resize);

            var stageheight = Math.min(stage.fullScreenHeight, Screen.mainScreen.visibleBounds.height);
            var stagewidth = Math.min(stage.fullScreenWidth, Screen.mainScreen.visibleBounds.width);

            stage.stageHeight = Math.min(stagewidth, stageheight);
            stage.stageWidth = Math.max(stagewidth, stageheight);


            scaleFactor = stage.stageHeight / APP_ORG_HEIGHT;

            NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;
        }

Androidデバイスでは動作しますが、テストデバイスでは動作しません。

ここに私のxml設定:

  <initialWindow>
    <systemChrome>standard</systemChrome>
    <transparent>false</transparent>
    <visible>true</visible>
    <fullScreen>true</fullScreen>
    <aspectRatio>landscape</aspectRatio>
    <renderMode>gpu</renderMode>
    <autoOrients>false</autoOrients>
  </initialWindow>
  <android>
    <manifestAdditions>
      <![CDATA[<manifest android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
</manifest>]]>
    </manifestAdditions>
  </android>
  <iPhone>
    <InfoAdditions>
      <![CDATA[<key>UIDeviceFamily</key><array><string>1</string></array><key>UIPrerenderedIcon</key><true/><key>UIApplicationExitsOnSuspend</key><true/>]]>
    </InfoAdditions>
    <requestedDisplayResolution>high</requestedDisplayResolution>
  </iPhone>
4

1 に答える 1

1

に変更してみてください

    public function Main() {
        if(stage) Init();
        addEventListener(Event.ADDED_TO_STAGE, Init);
    }

    private function Init(e:Event = null) {
        if(e != null) this.removeEventListener(Event.ADDED_TO_STAGE, Init);
        ...

DisplayObjectイベントリスナーが接続されるまでに、はすでにステージ上にある可能性があるため、追加されたイベントを受信して​​いない可能性があります。その場合、利用可能かどうかを条件付きでテストすることをお勧めしstageます。もしそうなら、先に進んで作業を行ってください。それ以外の場合は、オブジェクトがステージに追加されるまで待ちます。

Event.RESIZEまた、ステージスケールモードとステージアライメントを変更する前に、イベントハンドラーを追加します。

そして最後に、アプリケーションの初期化中に複数のサイズ変更イベントを受け取る可能性があります。しかし、現在のコードの記述方法では、最初のコードに対してのみ実行されます。これは「最終的な」サイズではない可能性があります。サイズ変更ハンドラーを書き直して、複数回呼び出すことができるようにすることをお勧めします。これはほとんど問題ないように見えます。

于 2012-07-27T16:23:53.537 に答える