iPhone:如何在缩放缩放uiscrollview时重绘子视图

时间:2010-02-04 22:38:40

标签: iphone uiview uiscrollview zoom subview

我正在开发一个iPhone应用程序,它将多个自定义UIView作为子视图放在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;
}

3 个答案:

答案 0 :(得分:1)

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

所以将来的某一天,这将是明智的解决方案。

答案 1 :(得分:1)

当视图缩放时,您将从imageView返回的viewForZoomingInScrollView:将调整大小。您可以在该视图中实施setFrame:或更标准的layoutSubviews来进行更新。滚动视图的contentSize也会在缩放过程中不断更新,因此您可以在自定义滚动视图中实现setContentSize:

答案 2 :(得分:0)

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

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