5

My iPad appは、自動回転を頻繁に使用します。これは素晴らしい。しかし、既定の実装didReceiveMemoryWarninghereと記載)によって隠しビューが解放された場合、ビューがnibから再ロードされ、私はランドスケープにあることに気付きました。これは、iPadを手動で回転させて適切な方向に動かすまで、インターフェイスを壊してしまいます。didReceiveMemoryWarningによってリリースされた後、Nibから読み込まれたビューをiOSで自動回転させないのはなぜですか?

私は、iOSが現在の方向でビューを読み込むと仮定しました。それは、アプリが起動したときの動作です。しかし、いいえ、didReceiveMemoryWarningでアンロードされた後ではありません。何故なの?そして、私はそれをどうやってやることができますか?

+0

ビューはビュー階層外(UIViewControllerビューのサブビューではありません)ではありませんか? – dstnbrkr

+0

@barker - いいえ、実際はアプリのメインビューです。 – theory

+0

@barkerああ、もっと慎重に見て、私はそれが適切に回転されていないビューのサブビューだと思う。ペン先に含まれるサブビューは適切に回転されます。並べ替えHrm。 '-willAnimateRotationToInterfaceOrientation:duration:' メソッドで何かが起きる可能性があります。回転がアニメーション化されていないため、呼び出されないことがありますか? – theory

答えて

4

答え、dbarkerからポインタへの感謝を決定し、ビューがdidReceiveMemoryWarningのデフォルトの実装は、ビューをアンロードした後に再ロードされたときに-willRotateToInterfaceOrientation:duration:-willAnimateRotationToInterfaceOrientation:duration:、などのView Controllerの回転メソッドは、呼び出されることはないということです。私はそれがアプリの起動時に異なるだろう、なぜさっぱりだが、私は私がやったこと

がそうのように、didReceiveMemoryWarningYESに、unloadedByMemoryWarningという名前のブールIVARを、設定した回避策を持っています:

- (void) didReceiveMemoryWarning { 
    unloadedByMemoryWarning = YES; 
    [super didReceiveMemoryWarning]; 
} 
をそのフラグがtrueの場合

はその後、viewDidLoadで、私はNOにそれを設定し、回転方法を自分自身を呼び出します。

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

はちょっと私はこれをしなければならないことを吸うが、それは私が仕事をして、そして今'mあまりにも多くのメモリを使用するためにiOSによって殺される心配はあまりありません。

+0

私はiPadアプリで同じ問題に直面しています。これは奇妙な動作ですが、あなたのソリューションは私を助けました。 – sandy

+0

その解決策を試しましたが、残念ながら私のやり方でそれをやっていません。ブリー... *掘り起こす* – Kalle

1
  1. iOS 5がこれを修正する可能性があります。

  2. iOS 4.3の場合、別の修正方法がありました。ペン先からのロード後:それが働いた場合

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

    、あなたはそれがすべてのロードを行うためにも安全なので、unloadedByMemoryWarningロジックを投棄ことができます。チップ&(基本的に)はhereから手に入りました。

関連する問題