正确缩放包含许多子视图的 UIScrollView

Posted

技术标签:

【中文标题】正确缩放包含许多子视图的 UIScrollView【英文标题】:Properly zooming a UIScrollView that contains many subviews 【发布时间】:2009-12-02 21:29:19 【问题描述】:

我创建了一个可缩放的 UIScrollView 并向其中添加了 100 个子视图(平铺)。视图左右滚动完美。但是,我想允许缩放。

为此,我读到我的代表需要实现:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
    return ???;

我见过只有一个子视图可以缩放的例子,所以他们在那个方法中返回那个子视图。然而,就我而言,我还有很多。进行缩放的正确方法是什么?

我尝试创建另一个 UIView 并向其中添加 100 个子视图。然后在上面的方法中返回一个视图,但我不起作用(它会缩放,但一旦停止,它就不再具有交互性了)。

【问题讨论】:

您是否尝试过返回 UIScrollView 本身? 是的,这是我尝试的第一件事。它也把事情搞砸了...... 【参考方案1】:

没错,

这也是苹果在Scroll View Programming Guide 中提到的:

只需创建一个视图,将所有子视图添加到此视图,然后将新创建的视图作为单个子视图添加到滚动视图...

然后在 viewForZoomingInScrollView 委托方法中返回 Index 0 处的对象:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 

    return [self.scrollView.subviews objectAtIndex:0];

【讨论】:

【参考方案2】:

我创建了添加所有内容的视图:

UIView *zoomableView = [[UIView alloc] init];

不设置框架。

当我添加了所有子视图之后,我将它的框架设置为足够大以容纳所有平铺子视图时,问题就解决了。

【讨论】:

也为我工作 - 将父视图的帧大小设置为其子视图的最大帧大小(在我的情况下,女巫是图像大小)。【参考方案3】:

您必须将您要添加的视图作为子视图返回到滚动视图。

例如:如果您将图像视图添加到滚动视图,则编写

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 

return imageView object;

【讨论】:

以上是关于正确缩放包含许多子视图的 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 子视图在缩放下不保持正确的边界尺寸

在缩放 UIScrollView 子视图时保持恒定的线宽

缩放嵌套在 UIScrollView 中的子视图

平移和缩放的替代方案

内部动画时的 UIScrollView 回调

如何选择正确的视图来缩放视图中的多个 UIScrollView 对象(iPhoneSDK obj-C)?