2

我正在尝试创建一个具有水平滚动功能的应用程序,以便能够水平滚动一系列图像。我观看了 WWDC Session 104 视频,虽然他们制作了一个有趣的应用程序,但他们很快就了解了它的基础知识。

我了解使用 UIScrollView,并且我必须启用分页。之后他们说我应该添加更多视图作为滚动视图的子视图,但我不清楚如何做到这一点。我也不清楚如何将图像添加到这些视图中。

正如您可能会说的那样,我对此很陌生,因此我们将不胜感激。

4

3 回答 3

12

您想查看UIImageView。这是一个专门用于保存图像的视图。

添加图像时,您希望设置它们的矩形(可能initWithFrame:用于 each UIImageView),以便:

  • 第一个图像在 0,0
  • 第二张图片位于 320,0
  • 第三是640,0(等)

即每个图像是前一个图像右侧的 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.

希望这有助于你前进。

于 2010-07-15T10:31:25.247 回答
1

假设你有“无限”的图像,把它们都放在一个巨大的 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 以防止弹跳。(真正启用弹跳会带来相当不寻常的用户体验)

于 2010-07-15T10:24:16.070 回答
1

查看Apple 的 PageControl 示例代码。它相当简短且易于理解,因此您将了解设置项目的要点,在该项目中,当您水平滑动时会加载多个视图控制器。

一旦你有了这个设置,那么视图控制器就有责任加载它自己的内容(在你的例子中,一个图像)。在处理分页等问题之前,您应该确保先了解如何加载图像(使用线程等)。

将其视为两个独立的任务。视图控件负责加载和显示图像。带有分页的滚动视图只是告诉适当的视图控制器何时加载自身(它不关心视图控制器加载后会做什么)

祝你好运!

于 2010-07-15T16:02:02.740 回答