UIImageView自体ではなく、UIScrollView(UIImageViewを含む)に変換を適用することで修正しました。
UIScrollViewに変換を適用するだけでは、十分に機能しませんでした。回転した画像を小さなビュー内に配置し、ズームでは使用可能な画面スペースを使用しませんでした。
私はついにこれを修正することができたので、ここに方法があります。
要件
- フルスクリーン画像の水平スクロールリスト
- デバイスを回転させると、アプリが回転してはなりませんが、表示されている画像を回転させる必要があります
- デバイスを縦向きと横向きの両方で保持している場合は、写真をズームできる必要があります
実装方法
高さが画面の高さに等しく、幅が画面の幅に等しい1つのメインUIScrollView*画像数。ページングが有効になっています。
このメインのUIScrollViewには、各画像のサブビューが含まれています。各サブビューは次のようになります:
UIScrollView> UIView> UIImageView
UIScrollViewには画面のサイズがあり、そのorigin.xプロパティは最初のサブビューでは0であり、後続の各UIScrollViewの画面幅とともに増加します。結果はメインUIScrollViewであり、すべてのサブUIScrollViewが次のように隣り合っています(間隔なし)。
┌────────────────────┐
│┌───┐┌───┐┌───┐┌───┐│
││ 1 ││ 2 ││ 3 ││ 4 ││
││ ││ ││ ││ ││
│└───┘└───┘└───┘└───┘│
└────────────────────┘
回転の問題を修正するために、UIImageViewはUIScrollViewからの直接のサブビューではなくなりましたが、コンテナーUIView内に埋め込まれるようになりました。
メインのUIScrollViewデリゲートのviewForZoomingInScrollView:
メソッドは、表示されている画像のコンテナUIViewを返すようになったため、このコンテナUIViewがズームに使用されます。画像ビューの回転は、とのsetTransform:
両方CGAffineTransformScale
を使用したアニメーションで引き続き実行されますCGAffineTransformMakeRotation
。
コンテナUIViewを使用しない実装が機能しなかったのは、すでに変換が適用されている場合、UIImageViewをメインのUIScrollViewで変換できなくなったためだと思います。