1

複数のカスタム UIView を UIScrollView のサブビューとして配置する iPhone アプリを開発しています。各ビューにはベース ビューの一部をトレースする独自の描画ルーチンがあるため、サブビューは透明なビューとして互いの上に配置されます。基本ビューは UIImageView です。これは通常、ユーザーがパンやズームイン、ズームアウトできるようにしたい大きな画像です。

私が抱えている問題は、UIScrollView をズームインおよびズームアウトすると、ユーザーがズームしている間、サブビューが再描画されないことです。ズームが完了したら、サブビューを適切に再配置およびスケーリングできますが、ユーザー エクスペリエンスは望ましくありません。ImageView と共にサブビューをスケーリングするためにズームが行われているため、サブビューを非表示にするか再描画する方法を見つけることができませんでした。

何か案は?

ありがとう!

実装したコードは次のとおりです。

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {

 for (UIView *view in subViews)
 {
  [view updateView:scale];
 }
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *) scrollView {
 return imageView;
}
4

3 に答える 3

1

In >=3.2 there is now: - (void)scrollViewDidZoom:(UIScrollView *)scrollView

So some day in the future this will be the sensible solution to this.

于 2010-05-19T02:08:28.267 に答える
1

imageViewビューがviewForZoomingInScrollView:ズームすると、元の のサイズが変更されます。更新を行うために、そのビューでsetFrame:より標準的なものを実装できます。layoutSubviewsスクロール ビューのcontentSizeもズーム中に継続的に更新されるためsetContentSize:、カスタム スクロール ビューで実装できます。

于 2010-05-19T02:55:49.077 に答える
0

それを実装する適切な方法はわかりませんが、回避策があります。

viewForZoomingInScrollViewはズームの直前と直後に呼び出されるため、を使用して別のスレッドでメソッドを呼び出すscrollViewDidEndZoomingことができます。このメソッドは、100 ミリ秒ごと (または適切に見えるその他の期間) をviewForZoomingInScrollViewチェックし、必要なすべての変更を行います。で、新しいメソッドの実行を停止します。zoomScaleUIScrollViewscrollViewDidEndZooming

于 2010-02-04T22:59:38.563 に答える