我正在开发一个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;
}
答案 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
中,您将停止执行新方法。