1

下面是我的屏幕设计。

在此处输入图像描述.

我想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 属性而调整大小。但 innerView 的宽度和高度为 100(在放大/缩小时不会更改)。

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

最后,我想要的每当innerViewlblTest帧改变比我想要增加/减少numberOfLinelblTest时间zoom in/out

我试图手动添加innerView&lblTest但得到的问题是它的宽度和高度比它的超级视图(mainView)增加得更多。

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

提前致谢。

4

1 回答 1

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);
}
于 2013-11-11T07:02:07.857 回答