1

画像と、ユーザーが ScrollView 内で画像を切り替えることができるセグメント化されたコントロールを含む UIScrollView があります。UIImageView 内で画像を交換するだけで、新しい画像がズームイン状態で表示されます。UIScrollView をズームインしていない状態にリセットするにはどうすればよいですか?

4

2 に答える 2

2

github.com/andreyvit/ScrollingMadness/で、UIScrollView ズームがどのように (そしてなぜ) 機能するかについて詳しく説明しています。

(リンクには、UIScrollView をプログラムでズームする方法、フォト ライブラリ スタイルのページング + ズーム + スクロールをエミュレートする方法、サンプル プロジェクト、およびズーム マジックの一部をカプセル化する ZoomScrollView クラスの説明も含まれています。)

見積もり:

UIScrollView には「現在のズーム レベル」という概念がありません。これは、含まれる各サブビューに独自の現在のズーム レベルがある可能性があるためです。UIScrollView には、現在のズーム レベルを維持するためのフィールドがないことに注意してください。ただし、サブビューをピンチズームし、その変換を CGAffineTransformIdentity にリセットして再度ピンチすると、サブビューの以前のズーム レベルが復元されていることがわかるため、誰かがそのズーム レベルを保存していることがわかります。

実際、逆アセンブルを見ると、独自のズーム レベルを格納しているのは UIView です (_gestureInfo フィールドが指す UIGestureInfo オブジェクト内)。また、 や のような文書化されていない優れたメソッドのセットもzoomScaleありsetZoomScale:animated:ます。(注意してください、それには回転関連のメソッドもたくさんあります。近いうちに回転ジェスチャがサポートされるかもしれません。)

ただし、ズーム専用の新しい UIView を作成し、実際のズーム可能なビューをその子として追加すると、常にズーム レベル 1.0 から開始されます。プログラムによるズームの実装は、このトリックに基づいています。

于 2009-05-07T22:12:40.093 に答える
0

ピンチズームイベントの完了時にビューを再描画しない場合、ズーム係数は、viewForZoomingInScrollView:デリゲートメソッドから返すビューのtransformプロパティによって設定されます。このズームをリセットするには、ビューの変換プロパティの値をCGAffineTransformIdentityに設定します。

ただし、次のピンチズーム操作は、前のピンチズームが中断したところから開始されることに注意してください(つまり、新しいスケールは無視されます)。これを回避するには、ここで説明する内容の一部を実装する必要がある場合があります。

于 2009-03-04T19:43:09.927 に答える