5

私のiPadアプリは、自動回転を多用しています。これは素晴らしい。ただし、(ここでdidReceiveMemoryWarning説明するように)のデフォルトの実装によって非表示のビューが解放された場合、ビューがペン先から再ロードされ、たまたま横向きになっていると、縦向きにロードされることに気付きました。これは、iPadを手動で回転させて、適切な方向に移動させるまで、インターフェイスに大混乱をもたらします。

私は、iOSが現在の向きでビューをロードすると想定していました。これは、アプリの起動時に実行されることです。しかし、それは違います。によってアンロードされた後ではありませんdidReceiveMemoryWarning。なぜだめですか?そして、どうすればそれを行うことができますか?

4

2 に答える 2

4

dbarkerからのポインタのおかげで決定された答えは、デフォルトの実装がビューをアンロードした後にビューがリロードされたときに、とを含むビューコントローラの回転メソッドが呼び出されないということ-willRotateToInterfaceOrientation:duration:です。アプリの起動時になぜ異なるのかわかりませんが、回避策はあります-willAnimateRotationToInterfaceOrientation:duration:didReceiveMemoryWarning

私がしたことは、次のように、という名前のブールivarunloadedByMemoryWarningYESinに設定することでした。didReceiveMemoryWarning

- (void) didReceiveMemoryWarning {
    unloadedByMemoryWarning = YES;
    [super didReceiveMemoryWarning];
}

次に、でviewDidLoad、そのフラグがtrueの場合、に設定してからNO、自分でローテーションメソッドを呼び出します。

if (unloadedByMemoryWarning) {
    unloadedByMemoryWarning = NO;
    [self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
    [self willAnimateRotationToInterfaceOrientation:self.interfaceOrientation duration:0];
    [self didRotateFromInterfaceOrientation:self.interfaceOrientation];
}

ちょっとこれをしなければならないのは残念ですが、それは機能します。そして今では、メモリを使いすぎてiOSに殺される心配はありません。

于 2011-01-12T05:08:27.330 に答える
1
  1. iOS5でこれが修正されるかもしれないと思います。

  2. iOS 4.3の場合、私は別の修正で幸運に恵まれました。ペン先からのロード後:

    [parent.view addSubview:nibView];  
    nibView.frame = parent.view.frame;  
    [nibView setNeedsLayout];  
    

    unloadedByMemoryWarningそれがうまくいけば、すべてのロードを安全に実行できるため、ロジックを破棄できます。ここから(基本的に)ヒントとコードを入手しました。

于 2012-01-05T14:37:13.977 に答える