0

UIPageViewController を使用して画像を表示する画像スライドショー ビューアがあります。画像ビュー ビューアの ViewController は非常に単純です。UIImageView を含む UIScrollView を含む最上位のビューです。最初の画像表示時またはデバイスを回転させると、画像はビューの寸法に合わせて縦横比が調整され、中央に配置されます。iOS 7 と iOS 6 の両方で発生する問題を除いて、問題なく動作します。

画像を変更するためにパンしている最中に画面に 2 つの画像が表示されている場合、デバイスを回転させると、1 つまたは複数の画像の表示が乱れることがあります。以前は中央に配置されていた画像が画面の間違った場所に表示され、これが回転およびズームしてもそのまま残ります。

これが起こったときに私が間違いを見つけることができる唯一のことは、UIImageView の center プロパティが実際にはフレームの中心ではないということです。viewDidAppear の UIImageView の center プロパティを、おそらくスケーリングされた UIImageView の中心に変更すると、すべての場合で画像が正しく表示されるように見えます。

これは、私が犯しているおなじみの間違いの影響のように聞こえますか?

質問に答えるように編集します:
willRotate または didRotate メソッドでは何もしません。viewDidLayoutSubviews
では、画像を現在の UIScrollView 境界 (全画面である完全なトップレベル ビュー) にアスペクト フィットし、中央に配置します。これにより、最初のプレゼンテーションとローテーションの両方が処理されます。「通常の」回転状況では問題は見られません。この問題は、pageViewController の 2 つの子ビューを同時に部分的に画面上で回転させた場合にのみ発生します。すべての場合で問題を「修正」できますが、確かに何か間違ったことをしています。

編集 2
画面上で 2 つの画像をパンしているときにデバイスを回転させたときに発生する頻度が低い別の異常を発見しました。例によって最もよく説明されています:

Page View Controller を使用して、AB C の左から右への一連の画像の 1 つの画像を表示しています。画像 B は画面上にあります。左にパンすると、画像 A と B の両方の一部が表示されます。画像 A へのパンがほぼ完了した場合、つまり B がほぼ画面外にある場合、デバイスを回転すると、通常、画像 B が画面上に表示されます (表示されたまま回転することはありません)。部分的なパン) が、別の方向にパンしたかのように、画像 C が表示されることがあります。他にこの種の行動を見た人はいますか?

4

1 に答える 1

0

ローテーションの準備をするために UIViewController で何をしていますか?

– willRotateToInterfaceOrientation:duration:

では、ローテーションが終わったら、どのように回復しますか?

- didRotateFromInterfaceOrientation

これらの呼び出しは特別に提供されているため、ローテーションの準備を整え、ローテーションが完了したらすべてを通常に戻すことができます。

于 2013-10-29T18:11:02.977 に答える