UI が回転するときにフレームを変更する UIViewController サブクラスがあります (たとえば、最も一般的には、フレームは同じサイズで、横向きと縦向きの両方で中央に配置されます)。ビューが回転すると、ビューは期待どおりにフレームを視覚的に変更します。しかし、新しいフレームの領域にあるコントロール (ボタン、スクロール ビューなど) は、タッチに反応しません。応答する唯一のコントロールは、元のフレームに残っているものです (したがって、ビューが左下に移動しても、右上隅のコントロールまたはコントロールの一部は応答したままです)。
フレームを変更するコードは次のとおりです。
- (void) setLandscape:(bool)bLandscape {
if( bLandscape )
[self setFrame:m_landscapeFrame];
else
[self setFrame:m_portraitFrame];
}
そして、回転を直接処理するより大きなView Controllerでは:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
bool bToLandscape= UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
[UIView beginAnimations:NULL context:nil];
[UIView setAnimationDuration:duration];
[m_pCurrentWindowViewController setLandscape:bToLandscape];
// (Some unrelated stuff happens here...)
[UIView commitAnimations];
}
私には、これはバグか、少なくとも Apple 側の設計の悪さのように思えます。ビューが視覚的にある位置にあり、制御の観点から別の位置にあるということは決してありません。しかし、私はこの動作を修正する方法を探しています。