2

我很难理解一些您可能觉得简单的问题UIScrollView

  1. 为什么我们增加contentSize而不是增加边界UIScrollView?实际上,我不明白界限和contentSize做什么。

  2. 当我设置pagingEnabled为 YES 时,scrollView 怎么知道在哪里停止滚动?

  3. 我想在我的UIScrollView. ( pagingEnabled = YES) 我在网上搜索,我找到了以下代码,rob mayoff 写的:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];

    #define kGutterWidth 20

    UIScrollView *scrollView = self.scrollView;
    CGRect scrollViewFrame = scrollView.frame;
    scrollViewFrame.size.width += kGutterWidth;
    scrollView.frame = scrollViewFrame;

    CGSize scrollViewSize = scrollView.bounds.size;

    for (int i = 0; i < colors.count; i++) {
        CGRect frame = CGRectMake(scrollViewSize.width * i, 0,
            scrollViewSize.width - kGutterWidth, scrollViewSize.height);
        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [scrollView addSubview:subview];
        [subview release];
    }

    scrollView.contentSize = CGSizeMake(
        colors.count * scrollViewSize.width,
        scrollViewSize.height);
}

代码来源: 如何创建分页滚动视图,视图之间有空间

这段代码可以正常工作,但只要我看不懂也没关系。

  1. 我知道最终页面将以原始大小加载,但我不明白它是如何发生的,因为每个页面都减去了 kGutterWidth。

  2. 为什么rob用kGutterWidth增加了scrollView的frame?

  3. 好吧,这个问题可能听起来很愚蠢,但我真的不明白。在代码中,Rob 创建了一个名为的新 scrollView 对象scrollView。它的价值等于self.scrollView价值。好吧,我不明白对 , 所做的更改是如何scrollView影响self.scrollView的,因为它们是不同的对象。它们的内存地址不同。

我很长一段时间都在努力理解这些问题。今天我决定把它们写在这里。

谢谢你。

4

2 回答 2

5

1-您可以检查boundsa 属性的实际描述UView

边界矩形,描述视图在其自己的坐标系中的位置和大小。

而实际contentSize

The size of the content view.

第一个与UIView相对于自身的实际大小有关(frame相对于它的superView)。第二个与它有关contentSize,其中一个contentSize大于它的frame,给你滚动能力。

2-从文档中:

如果此属性的值为 YES,则当用户滚动时,滚动视图会在滚动视图边界的倍数处停止。默认值为 NO。

我猜它是根据你的大小(宽度)UIScrollView和它的contentSize. 例如,带有 320pcontentSize UIScrollView帧的 640p 将有 2 个“页面”。(640/320 = 2)。

3-通过将UIView您拥有的“内部”每页小于实际页面来创建间隙。这基本上就是 Rob 在这里所做的:

  CGRect frame = CGRectMake(scrollViewSize.width * i, 0,
            scrollViewSize.width - kGutterWidth, scrollViewSize.height);

因此UIScroll,具有以下框架(0.0f,0.0f,320.0f,480.0f)和 acontentSize的a(1280.0f,480.0f)将给出:

第一项的框架 =>(0.0f,0.0f,300.0f,480.0f)

第二个项目的框架=>(320.0f,0.0f,300.0f,480.f)

第三项的框架 =>(640.0f,0.0f,300.0f,480.0f)

第四项的框架=> (960.0f,0.0f,300.0f,480.0f)


编辑 1.0:

我完全不明白。“将视图放在每个页面中小于实际页面”是什么意思?

举个例子,我用过: 所以你目前有 4 个“页面”,实际上你拥有的基本上是UIScrollView划分的 3 次,这给了你 4 个不同的地方,我们可以称之为页面。在每个“页面”内部,为了在每个页面之间给人一种“空间”的感觉,您将放置一个UIView比实际页面更小的页面。

编辑 2.0:

也许更直观的东西会帮助你:

在此处输入图像描述

编辑 3.0:

如果您了解分页的工作原理,这很容易...... 320px + 20px = 340px,这比 iPhone 屏幕尺寸的 320px 还大。由于每个UIView添加到UIScrollView340-20 = 320px,您将拥有大小为 340px 的“页面”。所以 340*3(个数UIViews)它给出了 1020px 最终基本上是 3 UIViews + 3 Spaces

于 2013-03-19T13:11:55.517 回答
0
  1. 边界是视图的真正容器。contentSize 是“可视”大小。示例:一个高度为 100 像素但包含十几个单元格的表格,其中单元格为 20 像素。您的总大小约为 240 像素,这是 contentSize,但边界高度为 100 像素。
于 2013-03-19T13:01:35.743 回答