2012-04-13 14 views
2

を回転さから他のビューを防ぎます。しかし、私のMainViewControllerからmodalViewControllerを提示して回転させると、NSLogは表示されなくなり、MainViewControllerはデバイスが回転したことを知らないので、modalViewが終了したときにインターフェイスが回転に対して調整されません。モーダルビューは、私は私のMainViewControllerでこのメソッドを持って

なぜモーダルビューで親が回転更新を受け取ることができないのでしょうか?これは典型的なことですか、またはセットアップに何か問題があるはずですか?

確かに、私は[mainViewController.view addSubview:modalView.view]を介してサブビューとしてmodalViewControllerを提示しようとしました。ローテーションの更新が適切に反映されました。 [mainViewController presentModalViewController:modalViewController];を実行しても更新が反映されない場合のみです。両方のビューでは

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Overriden to allow any orientation. 
    return YES; 
} 

+0

Modal View Controllerがこのメソッド呼び出しを防止する理由を正確にはわかりませんが、私自身はこの問題に不満を抱いていました。だから私はなぜそうでないのか分かりませんが、周りを回る方法は分かります。 あなたのコードのどこかで、[self.view presentModalViewController:viewController]という行を使用しますか? 代わりに、[self.view addSubview:viewController.view]を実行してください(これは私の目の前にコードがないと思います) 基本的にはモーダルではなく現在のビューにビューを追加しますすべてのwill/did/rotateメソッドが呼び出されるはずです! –

+0

何の代わりに私の更新をチェックしてください...あなたがそれを得ているのかもしれません。しかし、私はそれをサブビューにしたくありません。私はこれをモーダルビューとして機能させたいと思っています。 – Snowman

+0

申し訳ありません...トリガーハッピーエンターキー! :D今編集! –

答えて

4

明らかに、表示コントローラがモーダル表示されている場合、他の表示コントローラはメッセージを全く受け取りません。それが、この文脈ではどのようなモーダルなのかを意味します。

明白な解決策は、モードレスビューコントローラのviewWillAppearメソッドで方向をチェックすることです。

+0

次にviewWillAppearでは、ビューの幅が320だと思っているので、すべてのサイズをカスタム設定する必要があり、autoResizingは行われません。手動でフレームサイズを設定せずに、新しいビューの幅に合わせて自動的にすべてのサイズを変更するにはどうすればよいですか? – Snowman

+0

メインビューのautoresizesSubviewsプロパティを設定できます。それが助けになるかもしれない。 –

+0

iOS 6以降では、viewDidLayoutSubviewsでこれを行います。 viewWillAppearでは、ビューの次元はまだ更新されていません。 –

1

あなたはの実装を確認する必要があります。

+0

はい、これは両方のビューで既に行われています。 – Snowman

+0

そして、モーダルビューでは何を返すのですか? – LuisEspinoza

0

viewWillAppearで現在のインターフェイスの向きにレイアウトを調整する必要があります。明らかに、ビューは表示されないので、モーダル・ビュー・コントローラーが起動している間はアニメーション機能は呼び出されません。