UIScrollView中包含许多子视图,如何正确地进行缩放?

21

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

为此,我阅读了我的代理需要实现以下代码:

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

我看到过一些只有一个子视图进行缩放的示例,因此它们会在该方法中返回该子视图。 然而,在我的情况下,我有更多的子视图。那么正确的缩放方式是什么呢?

我尝试创建另一个UIView,并将100个子视图添加到其中。然后在上面的方法中返回那个视图,但它不起作用(虽然可以缩放,但一旦停止,就无法交互了)。


你尝试过直接返回UIScrollView本身吗? - fbrereto
是的,这是我尝试的第一件事。它也搞砸了一些东西... - Dimitris
3个回答

45

确切地说,

这也是苹果在 滚动视图编程指南 中提到的:

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

然后在 viewForZoomingInScrollView 委托方法中返回索引为 0 的对象:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{
    return [self.scrollView.subviews objectAtIndex:0];
}

2

我创建了视图,并使用以下内容添加了所有内容:

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

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

对我也起作用了 - 将父视图的框架大小设置为其子视图的最大框架大小(在我的情况下是图像大小)。 - Yony

0
你必须返回要添加到滚动视图作为子视图的内容。
例如:如果您要将图像视图添加到滚动视图中,则编写
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{
return imageView object;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接