1

サブビューとして複数の UIScrollViews を持つ UIScrollView を使用しており、それぞれに画像を表示するための UIImageView が含まれています。
アプリ自体は縦向きのみをサポートしていますが、デバイスが回転したときに画像ビューを回転させたいです (UIDeviceOrientationDidChangeNotification を観察します)。画像ビューの回転は、 と の両方を使用
してアニメーションで行われます。 画像ビューのズームは、画像ビューを含むスクロールビューから画像ビューを返すことによって行われます。 setTransform:CGAffineTransformScaleCGAffineTransformMakeRotation
viewForZoomingInScrollView:

1 つのことを除いて、これはすべてうまく機能しています。画像ビューを回転させると、ズームできなくなります。ショーのデバッグviewForZoomingInScrollView:が呼び出されていますが、呼び出されてscrollViewDidZoom:いません。

この問題の原因が何か考えられる人はいますか?

4

1 に答える 1

7

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で変換できなくなったためだと思います。

于 2013-03-07T13:46:29.057 に答える