缩放时调整 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 的内容大小的主要内容,如果未能解决你的问题,请参考以下文章