2

これは私を少し混乱させています。この質問ではapplicationFrameを使用し、これはboundsを使用するように、画面のサイズに関する UIScreen の 2 つのプロパティを知っています。

  • applicationFrame - デバイスのサイズから statusBar を引いたものを表示します。iPhone で NSLog を作成すると、次の値が得られます: (x=0、y=20、高さ = 460、幅 = 320)
  • 境界 - すべてのサイズの画面を表示します。値は次のとおりです: (x=0、y=0、高さ=480、幅=320)

ここで、デバイスを回転させると (ポートレイトからラドスケープへ)、これが表示されます (境界はすべて同じ値になります)。

  • 関数に移動: shouldAutorotateToInterfaceOrientation : x= 0 y=20 高さ= 460 幅= 320
  • YES を返す
  • Go 関数: didRotateFromInterfaceOrientation : x= 20 y=0 高さ = 480 幅 = 300
  • 理由はわかりませんが、これはshouldAutorotateToInterfaceOrientationでもう一度渡し、次を表示します: x= 20 y=0 height= 480 width= 300 (これはバグですか?)

ビューのサイズをこの新しいサイズに変更したいのですが、CGRect を取得すると、didRotateFromInterfaceOrientation で正しいサイズが得られ、高さが幅になり、逆もまた同様です。

この値を手動で設定せずにビューのサイズを美しく変更する良い方法はありますか?

4

1 に答える 1

1

(このポイントが横向きから縦向きに戻るためのものであると仮定します)

理由はわかりませんが、これは shouldAutorotateToInterfaceOrientation でもう一度渡し、次を表示します: x= 20 y=0 height= 480 width= 300 (これはバグですか?)

バグではありません!

shouldAutorotateToInterfaceOrientation は、デバイスの向きに合わせて UI が回転する前に呼び出されます。したがって、最初のケース (縦から横へ) では、縦方向の rect が得られます。2 番目のケース (横向きから縦向き) では、横向きの rect が得られます。

結論:
shouldAutorotateToInterfaceOrientationは、UI の回転を開始する前に CGRect 値を提供します didRotateFromInterfaceOrientationは、UI の回転が完了した後に CGRect 値を提供します

UIView のautoresizedSubviews および autoresizingMaskプロパティを確認することをお勧めします。これにより、回転/サイズ変更が必要なビューを操作する際の頭痛の種が大幅に軽減されます。

私はあなたの質問に答えて、これが役に立つことを願っています!

于 2011-07-02T18:11:48.590 に答える