【问题标题】:resize all subview in scrollViewDidZoom在 scrollViewDidZoom 中调整所有子视图的大小
【发布时间】:2013-11-20 08:05:41
【问题描述】:

下面是我的屏幕设计。

我想要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 帧发生变化时,我想在zoom in/outtime 增加/减少lblTestnumberOfLine

我尝试手动添加innerViewlblTest,但遇到的问题是它的宽度和高度增加超过它的超级视图(mainView)。

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

提前致谢。

【问题讨论】:

  • 您的layoutSubviews 实施中有什么?
  • @Abizern ScrollView 在 UIView 内(.xib 中的主超级视图)。
  • UIView-> scrollView-> mainView (UIView) -> innerView (UIView) -> 标签 ?

标签: ios iphone uiview uiscrollview zooming


【解决方案1】:

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

只需在委托中实现- (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);
}

【讨论】:

  • 感谢。你的建议对我真的很有帮助。但是在标签中,缩放时看起来很模糊。在此之前,使用 lbl.contentScaleFactor = zoomScale; 看起来不错财产 。我已经设置 lbl.layer.contentsScale = scale;根据您的建议,但无法正常工作。我该怎么办?
  • 设置lbl.contentScaleFactor = 2 似乎可以解决模糊问题。在 iPad2、iOS 7.0 上测试
  • 是的,设备中的文字不模糊。由于 affineTransform 当我放大 10 到 15 倍时,我收到“接收内存警告”,而不是应用程序崩溃 + iPad 崩溃(重新启动)自动。
  • 嗯,奇怪。我不认为仿射变换是内存警告的原因。您应该使用 Instruments 进行检查。
  • 如果你不介意,我们可以在聊天中继续这个对话吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2014-09-02
  • 2013-04-12
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多