1

我正在开发一个 iPhone 应用程序,它将多个自定义 UIViews 作为子视图放置在 UIScrollView 中。子视图作为透明视图放置在彼此的顶部,因为每个视图都有自己的绘图例程来跟踪基础视图的某些部分。基本视图是 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

在 >=3.2 现在有: - (void)scrollViewDidZoom:(UIScrollView *)scrollView

所以在未来的某一天,这将是解决这个问题的明智之选。

于 2010-05-19T02:08:28.267 回答
1

imageView您返回的将viewForZoomingInScrollView:随着视图的缩放而调整大小。您可以在该视图中实施setFrame:或更标准layoutSubviews的方法来进行更新。滚动视图的contentSize也在缩放期间不断更新,因此您可以setContentSize:在自定义滚动视图中实现。

于 2010-05-19T02:55:49.077 回答
0

我不知道实现它的正确方法,但我有一个解决方法:

由于viewForZoomingInScrollView是在缩放之前和scrollViewDidEndZooming之后调用的,因此您可以使用viewForZoomingInScrollView来调用单独线程中的方法。该方法将检查zoomScale您的UIScrollView每 100 毫秒(或任何其他看起来不错的时间段),并将进行所有需要的更改。scrollViewDidEndZooming您将停止执行新方法。

于 2010-02-04T22:59:38.563 回答