2009-09-01 12 views
6

すべてのUIViewControllerには、willRotateToInterfaceというメソッドがあります。UIViewからWillRotateToInterfaceOrientationイベントをキャッチする方法はありますか?

これはUIViewでも可能ですか?

これはモデルビューコントローラのアイデアと一致しますか?

私が考えることができる唯一の方法は、UIViewControllerからイベントをUIViewに送信することです。

現在の方向のグローバル変数はありますか?

答えて

17

UIDeviceOrientationDidChangeNotificationを守ってください。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

... 

- (void)orientationDidChange:(NSNotification *)note 
{ 
    NSLog(@"new orientation = %d", [[UIDevice currentDevice] orientation]); 
} 

UIDevice Class Reference

は、私はあなたがこれらの通知を送信する場合によuneedが-beginGeneratingDeviceOrientationNotificationsを追加することに注意してください、とあなたがそれらを停止したいとき-endGeneratingDeviceOrientationNotificationsを呼び出す必要があります。これらを生成することはバッテリーに影響するため、画面上に表示されているときにのみ行うようにしてください。 UIViewControllerはすべてこれを行います。したがって、View Controllerをお持ちの場合は、その作業を行う価値があります。

2
あなたがグローバル通知を購読すると、デバイスを回転させたときのコールを取得することができます

、それは文句を言わない...しかし、あなたのために何かを

[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(didRotate:) 
name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 
3

あなただけの新しいサイズ/レイアウトするときにビューを調整したい場合オリエンテーションが変更されたら、layoutSubviewsメソッドをオーバーライドするだけです。

ビューのサイズが変わるたびに呼び出されます。これは、通常、ビューを回転させると発生します。

+0

これは、layoutSubviews呼び出しで行われた変更がアニメーション可能であった場合の完璧な解決策です。 –