缩放时调整 UIScrollView 的内容大小

Posted

技术标签:

【中文标题】缩放时调整 UIScrollView 的内容大小【英文标题】:Resize content of UIScrollView when zooming 【发布时间】:2012-10-17 09:28:39 【问题描述】:

我知道这个主题有很多主题,但我没有找到解决问题的好方法。 我有一个 UIScrollView,其中包含作为子视图添加的图像和其他组件。 我只想知道在缩放时实时调整组件大小的好方法。

- (void)scrollViewDidZoom:(UIScrollView *)scrollView 
    // Resizing image and other components

EDIT :我希望滚动视图中的组件在缩放时保持相同大小。我不希望它们在缩放过程中变大或变小。

编辑:这是我的 UIViewController 的层次结构

查看 滚动视图 主视图 图像视图 绘图视图(带有 UILabel、其他 UIView 等组件的 UIView...)

非常感谢!

【问题讨论】:

【参考方案1】:

我将保持 UIScrollView 的比例不变,并在子视图的帮助下达到目标(调整其大小,而不是滚动视图),我将在其中放置所有子视图和您使用的图像。 所以它会是这样的:

yourView.transform = CATransform3DMakeScale(newScale, newScale, 1.0);

其中 yourView 是 scrollView 的主要(唯一)子视图。然后我会用新的比例重新计算 yourView 的大小,并将其设置为 scrollView 的 contentSize 参数,这样您就可以实际滚动放大的内容,而不仅仅是看到它被截断。

唯一的问题是,在这种情况下,您应该使用 scrollViewDidZoom 以外的回调: 我猜。

附:更改 UIView 的 transform 参数,您无需担心子视图的比例:CoreAnimation 为您完成一切。

【讨论】:

它是 CGAffineTransformScale 而不是 CATransform3DMakeScale。我做错了吗? 此外,我编辑了我的问题。我希望在缩放时滚动视图内的组件保持相同大小的印象。我不希望它们在缩放过程中变大或变小。 你喜欢哪个,但在你的情况下 CGAffineTransformScale 确实更好。与您的版本有关:就我看到您的任务而言,您实际上不需要放大/缩小您的滚动视图,而是在增加其 contentSize 后正确替换其中的子视图。所以你可以在你的回调中设置 scrollView.contentSize (这个回调不给你规模本身,所以如何找到缩放到的值是另一个问题)和位置(改变 frame.origin)子视图。 是的,但是当我放大滚动视图时(为了扩大图像),其他组件会自动变大/变小。我怎样才能避免这种情况? 我编辑了我的问题以显示 mu UIViewController 的层次结构。

以上是关于缩放时调整 UIScrollView 的内容大小的主要内容,如果未能解决你的问题,请参考以下文章

悬停时调整背景大小

当 iframe 改变高度时调整容器大小

UIScrollView,滑动,缩放

如何在运行时调整 swf 的大小以让浏览器创建 html 滚动条?

缩放时,UIScrollview 子视图无法识别手势

UIScrollview 子视图在缩放后无法识别平移手势