iPhoneの回転時に画面に合わせて画像を拡大縮小します
-
26-09-2019 - |
質問
UIImageView を含む UIScrollView がありますが、iPhone が回転したときに正しい動作を取得するのに問題があります。
ゴール: ポートレートからランドスケープに移行するときに次のものを取得しようとしています。
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| | AAAAAA |
|DDDDDDD| --> | CCCCCC |
|EEEEEEE| | EEEEEE |
|FFFFFFF| |_____GGGGGG_____|
|GGGGGGG|
---------
ここでは、iPhone が回転すると、縦向きビューの画像全体が横向きビューに収まるように拡大縮小されます。それも中心にあります。アスペクト比も維持するように努めています。ユーザーインタラクションもオンになっており、ユーザーは画面全体を使用して画像をパン/ズームできる必要があります。
現在、私は次のものを持っています autoresizingMask
スクロールビュー上:
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
しかし、これにより次のことが得られます
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| |AAAAAA |
|DDDDDDD| --> [BBBBBB |
|EEEEEEE| [CCCCCC |
|FFFFFFF| [DDDDDD__________|
|GGGGGGG|
---------
この設定では、スケールと左上隅からのオフセットが維持されます。
質問:適切なツールを使用してこの動作を取得することは可能ですか? autoresizingMask
?そうでない場合は、おそらく設定する必要があります
scrollView.autoresizingMask = UIViewAutoresizingNone;
そして手動で設定 zoomScale
そして contentOffset
回転時の UIScrollView の場合。しかし、それはどこで行うべきでしょうか?その変化をアニメーション化するのはどうでしょうか?
解決:以下の回答をわずかに変更することで、以下のコードを使用して上記の動作を取得しました。
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
解決
これを試して:
scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeAspectFit; // You could also try UIViewContentModeCenter
imageView が UIScrollView 内で自動的にサイズ変更されるかどうかはわかりません。そのため、自動サイズ変更が機能しない場合は、回転時にスクロールビューのサイズと同じになるようにフレームを自分で設定してみてください。
他のヒント
私も同様の状況で、一連の写真を表示するための 3 つの imageView (「前」、「現在」、「次」) を持つ非常に単純なスクロールビューがありました。
写真はすべて iPad 用のサイズでしたが、横向きと縦向きが混在していました。画面内に収まるようにしたかったのです(すなわち、必要に応じてレターボックス化されます)、アスペクト比は維持されます。これを機能させるには、3 つの imageView に対してこれを行うだけでよいことがわかりました。
imageView.contentMode = UIViewContentModeScaleAspectFit;