下面是我的屏幕设计。
.
我要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 属性而调整大小。但是 innerView 的宽度和高度为 100(在放大/缩小时不会改变)。我们可以根据规模改变这个吗?
最后我想要什么每当
innerView
& lblTest
框架变化比我想增加/减少 numberOfLine
的 lblTest
在 zoom in/out
时间。我已尝试添加
innerView
& lblTest
手动但得到它的宽度和高度比它的 super View (主视图)增加更多的问题。真的很感激如果有人知道如何存档这个。
提前致谢。
最佳答案
当您放大 ScrollView 时,zoomView
( mainView
在你的情况下)没有调整大小,只是应用在它的图层上的仿射变换( CALayer
)。例如,对于 1.2 zoomScale,它是:[1.2, 0, 0, 1.2, 0, 0]
.
所以它的界限没有改变 - 只是它的所有内容都按比例放大/缩小,它也会影响它的 frame
属性 - 所以也不是包含的内部 View ,并且标签将被调整大小,只是在渲染主视图时放大/缩小,这就是它们的框架不受影响的原因。
只需执行- (void)scrollViewDidZoom:(UIScrollView *)scrollView
在委托(delegate)中并打印出主视图的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);
}
关于ios - 在 scrollViewDidZoom 中调整所有 subview 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856928/