我正在尝试创建一个具有水平滚动功能的应用程序,以便能够水平滚动一系列图像。我观看了 WWDC Session 104 视频,虽然他们制作了一个有趣的应用程序,但他们很快就了解了它的基础知识。
我了解使用 UIScrollView,并且我必须启用分页。之后他们说我应该添加更多视图作为滚动视图的子视图,但我不清楚如何做到这一点。我也不清楚如何将图像添加到这些视图中。
正如您可能会说的那样,我对此很陌生,因此我们将不胜感激。
我正在尝试创建一个具有水平滚动功能的应用程序,以便能够水平滚动一系列图像。我观看了 WWDC Session 104 视频,虽然他们制作了一个有趣的应用程序,但他们很快就了解了它的基础知识。
我了解使用 UIScrollView,并且我必须启用分页。之后他们说我应该添加更多视图作为滚动视图的子视图,但我不清楚如何做到这一点。我也不清楚如何将图像添加到这些视图中。
正如您可能会说的那样,我对此很陌生,因此我们将不胜感激。
您想查看UIImageView。这是一个专门用于保存图像的视图。
添加图像时,您希望设置它们的矩形(可能initWithFrame:
用于 each UIImageView
),以便:
即每个图像是前一个图像右侧的 320 像素。
最后一步是contentSize
为您设置UIScrollView
- 这是CGSize
描述滚动视图的总大小的。
如果您有 3 张图像,则可以使用例如将其设置为 (320*3) * 480
myScrollView.contentSize = CGSizeMake(320*3, 480);
很多人在初始化滚动视图时,都有一个 for 循环或类似的循环来逐步浏览他们想要显示的图像。这些 for 循环看起来像这样:
CGFloat scrollWidth = 0.f;
for (UIImage *someImage in someNSArrayWithImages) {
UIImageView *theView = [[UIImageView alloc] initWithFrame:
CGRectMake(scrollWidth, 0, 320.f, 480.f)];
theView.image = someImage;
[myScrollView addSubview:theView];
[theView release];
scrollWidth += 320.f;
}
myScrollView.contentSize = CGSizeMake(scrollWidth, 480.f);
通过这种方式,您可以将内容排列好,同时为您获取内容大小。
如果您想让滚动视图“智能”滚动到每个图像并在人们向左/向右滑动时停止,您可以执行myScrollView.pagingEnabled = YES
.
希望这有助于你前进。
假设你有“无限”的图像,把它们都放在一个巨大的 UIScrollView 中或之前的发射时间将不是一个选择。(UIView 的大小是有限制的)
我解决它的方法:制作一个覆盖整个屏幕的 UIScrollView。它的内容应该是一个 3*320 宽和 480 高的 UIView,向左延伸 320px,向右延伸 320px。
在里面放3个UIImageView,左中右。设置 paging=YES,因此 uiscrollview 剪辑到您创建的 3 个“页面”。
确保您的班级是 uiscrollview 的代表,并听取
-(void)scrollViewDidEndDragging:(UIScrollView*)sv willDecelerate:(BOOL)notFinished
-(void)scrollViewDidEndDecelerating:(UIScrollView*)sv
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView*)sv
并在达到分页边界时进行适当的转换;移动图像并设置 ContentOffset 以便您再次查看中心图像。
我建议你先做这个,然后再继续阅读......
然后你会遇到一个错误,记录在这里UIScrollView - (bounces = NO) 似乎覆盖 (pagingEnabled = YES)和这里http://www.iphonedevsdk.com/forum/iphone-sdk-development/935-paging-uiscrollview .html,这使得您不能同时禁用弹跳和启用分页。所以启用弹跳和子类 UIScrollView,在那里推翻 setContentOffset 以防止弹跳。(真正启用弹跳会带来相当不寻常的用户体验)
查看Apple 的 PageControl 示例代码。它相当简短且易于理解,因此您将了解设置项目的要点,在该项目中,当您水平滑动时会加载多个视图控制器。
一旦你有了这个设置,那么视图控制器就有责任加载它自己的内容(在你的例子中,一个图像)。在处理分页等问题之前,您应该确保先了解如何加载图像(使用线程等)。
将其视为两个独立的任务。视图控件负责加载和显示图像。带有分页的滚动视图只是告诉适当的视图控制器何时加载自身(它不关心视图控制器加载后会做什么)
祝你好运!