我很难理解你可能会发现的一些关于UIScrollView
的简单问题。
为什么我们增加contentSize
而不是UIScrollView
的范围?
实际上,我不明白界限和contentSize
的作用。
当我将pagingEnabled
设置为YES时,scrollView如何知道停止滚动的位置?
我想在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); }
代码的来源: How to create a paging scrollView with space between views
此代码正常运行,但只要我不理解它就没关系。
我知道最终页面会加载原始大小,但我不明白它是如何发生的,因为每个页面都用kGutterWidth减去。
为什么rob会使用kGutterWidth增加scrollView的框架?
好的,这个问题可能听起来很愚蠢,但我真的不明白。
在代码中,Rob创建了一个名为scrollView
的新scrollView对象。
它的值等于self.scrollView
值。
好吧,我不明白对scrollView
所做的更改如何影响self.scrollView
,
因为它们是不同的对象。他们的记忆地址不同。
我很长时间都在努力理解这些问题。 今天我决定把它们写在这里。
谢谢。
答案 0 :(得分:5)
1-您可以查看bounds
的{{1}}属性的实际说明:
bounds矩形,用于描述视图的位置和大小 它自己的坐标系。
实际的UView
:
contentSize
第一个与The size of the content view.
相对于自身的实际大小相关(与UIView
相关的frame
)。第二个与superView
相关,其contentSize
大于contentSize
,为您提供滚动功能。
2-来自文档:
如果此属性的值为YES,则滚动视图将停止 用户滚动时滚动视图边界的倍数。该 默认值为NO。
我猜这是根据frame
与其UIScrollView
的大小(宽度)计算得出的。例如,具有320p帧的640p contentSize
contentSize
将具有2“页面”。 (640/320 = 2)。
3-通过将每个页面中“{1}}”放在小于实际页面的位置来创建间隙。这基本上是Rob在这里做的事情:
UIScrollView
所以UIView
包含以下框架 CGRect frame = CGRectMake(scrollViewSize.width * i, 0,
scrollViewSize.width - kGutterWidth, scrollViewSize.height);
且UIScroll
为(0.0f,0.0f,320.0f,480.0f)
会给出这样的结果:
第1项的框架=&gt; contentSize
第二项的框架=&gt; (1280.0f,480.0f)
第3项的框架=&gt; (0.0f,0.0f,300.0f,480.0f)
第4项的框架=&gt; (320.0f,0.0f,300.0f,480.f)
修改1.0:
我根本不明白。什么是“放置视图 每个页面内部小于实际页面“?
所以让我们举个例子,我用过:所以你现在有4个“页面”,实际上你所拥有的基本上是(640.0f,0.0f,300.0f,480.0f)
分为3次,它给你4个不同的地方,我们可以调用页面。在每个“页面”内部,为了给出每个页面之间的“空间”感,您将使(960.0f,0.0f,300.0f,480.0f)
小于实际页面。
编辑2.0:
也许更直观的东西会帮助你:
编辑3.0:
如果您了解分页的工作方式,这很容易... 320px + 20px = 340px,这超过了iPhone屏幕尺寸的320px。由于添加到UIScrollView
的每个UIView
都有340-20 = 320px,因此您将拥有大小为340px的“页面”。所以340 * 3(UIView
的数量)它最终得到的1020px基本上是3个UIViews + 3个空格
答案 1 :(得分:0)