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

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

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

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

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

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

非常感谢!

【问题讨论】:

    标签: ios uiscrollview resize zooming image-resizing


    【解决方案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 的层次结构。
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多