调整scrollViewDidZoom中的所有子视图的大小

以下是我的屏幕devise。

在这里输入图像说明

我想Zoom in/out in **mainView**. mainView Width & Height is 300. Zoom in/out in **mainView**. mainView Width & Height is 300.要放大/缩小,我已经实现了下面的方法,它的工作正常。

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

一切都很好,直到这一点。 我已经设置scroll.minimumZoomScale=1scroll.maximumZoomScale=5

在缩放时间mainView Frame increase depend on **scrollView.zoomScale** ,我有检查- (void)scrollViewDidZoom:(UIScrollView *)scrollView在此方法。

在放大时间

 **if i get scrollView.zoomScale=2 than mainView Width & height become 600 if i get scrollView.zoomScale=3 than mainView Width & height become 900** 

在此过程中, innerView由于autoresize属性而resize。但innerView的宽度和高度为100(在放大/缩小时不会更改)。

我们可以根据比例改变这个吗?

最后,我想要什么每当innerViewlblTest框架改变比我想增加/减lesslblTestzoom in/out时间的numberOfLine

我已经尝试手动添加innerViewlblTest ,但得到其宽度和高度比其超视图(mainView)增加更多的问题。

真的很感激如果有任何知道如何归档这个。

提前致谢。

在放大滚动视图时,缩放视图(您的案例中的mainView )不会resize,只是在其图层( CALayer )上应用仿射变换。 例如,在1.2 zoomScale的情况下,它是: [1.2, 0, 0, 1.2, 0, 0] 1.2,0,0,1.2,0,0 [1.2, 0, 0, 1.2, 0, 0] 。 所以它的界限并没有改变 – 只是所有的内容放大/缩小,它也影响它的frame属性 – 所以也不包含内部视图,标签将被resize,只是在渲染mainView时放大/缩小,这就是为什么他们的框架是不受影响的。

只需在- (void)scrollViewDidZoom:(UIScrollView *)scrollView实现- (void)scrollViewDidZoom:(UIScrollView *)scrollView并打印出主视图的frame, bounds, layer.affineTransform以查看缩放时会发生什么。

要做出你想要的,你必须根据zoomScale调整标签:

 - (void)scrollViewDidZoom:(UIScrollView *)scrollView { float zoomScale = scrollView.zoomScale; self.label.bounds = CGRectMake(0, 0, 100*zoomScale, 100*zoomScale); // supposing that label's original size is {100, 100} self.label.layer.affineTransform = CGAffineTransformMakeScale(1.0/zoomScale, 1.0/zoomScale); }