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

时间:2013-11-08 10:36:18

标签: ios iphone uiview uiscrollview zooming

以下是我的屏幕设计。

enter image description here

我希望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由于自动调整大小属性而调整大小。但是宽度& innerView的高度为100(放大/缩小时不改变)。

我们可以根据规模改变吗?

最后我想要的是什么时候innerView& lblTest框架更改比我想在numberOfLine时间增加/减少lblTest zoom in/out一样。

我试图添加innerView&手动lblTest,但问题是它的宽度和宽度高度增加超过其superview(mainView)。

真的很感激如果有人知道如何存档。

先谢谢。

1 个答案:

答案 0 :(得分:4)

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

只需在代理中实施- (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);
}