0

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 側の設計の悪さのように思えます。ビューが視覚的にある位置にあり、制御の観点から別の位置にあるということは決してありません。しかし、私はこの動作を修正する方法を探しています。

4

1 に答える 1

1

didRotateFromInterfaceOrientation私が見つけた最も簡単な回避策は、でアニメーション化した後に でフレームを更新することでしたwillRotateToInterfaceOrientation

于 2012-07-17T22:30:26.467 に答える