希望/期待どおりに機能させるには、多くの場合、少し手間がかかることがわかりました。考慮すべきことは、回転を拾うために使用しているコールバックです.3つあり、それらはわずかに異なる目的を果たします.
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
これはおそらく使用したいものです。この時点でクエリを実行するとself.view.frame
(またはスーパーフレームを取得するために使用するものは何でも)、回転が完了した後のフレームの値が返されます。また、自動サイズ変更も考慮しており、回転が行われる前にこれを提供します(つまり、まだ目に見える効果はありません)。これを使用して、ビューのすべての新しい位置とサイズを計算し、それらを設定します。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
これは、回転が始まろうとしていることを示しますが、現在の向きのフレームを返します。これは、ビューの非表示/表示には役立ちますが、新しい位置の計算には役立ちません!
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
これは、回転が完了すると呼び出され、新しいサイズとフレームを返しますが、ここでビューの位置を変更しようとすると、回転が完了した後に飛び跳ねているように見えます。
これは本当の雌犬になる可能性があるため、自動サイズ変更で遊ぶこともお勧めします。コードや xib juts で自動サイズ変更を設定して、おかしなことをしないようにすることがあります。
長方形がView Controllerにネストされている場合、それらは自動的に回転するはずです(おそらく、私が追加したと思っただけです)