调整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=1
和scroll.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(在放大/缩小时不会更改)。
我们可以根据比例改变这个吗?
最后,我想要什么每当innerView
& lblTest
框架改变比我想增加/减lesslblTest
在zoom in/out
时间的numberOfLine
。
我已经尝试手动添加innerView
& lblTest
,但得到其宽度和高度比其超视图(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); }