以下是我的屏幕设计。
。
我希望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
由于自动调整大小属性而调整大小。但是宽度& innerView的高度为100(放大/缩小时不改变)。
我们可以根据规模改变吗?
最后我想要的是什么时候innerView
& lblTest
框架更改比我想在numberOfLine
时间增加/减少lblTest
zoom in/out
一样。
我试图添加innerView
&手动lblTest
,但问题是它的宽度和宽度高度增加超过其superview(mainView)。
真的很感激如果有人知道如何存档。
先谢谢。
答案 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);
}