iPhone水平滚动

时间:2010-07-15 10:06:34

标签: iphone uiscrollview horizontal-scrolling

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

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

你可能会说我在这方面很新,所以任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:12)

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

添加图片时,您需要设置自己的版本(可能每个initWithFrame:使用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

希望有助于您前进。

答案 1 :(得分: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) seems to override (pagingEnabled = YES)http://www.iphonedevsdk.com/forum/iphone-sdk-development/935-paging-uiscrollview.html,这使你无法禁用弹跳并同时启用分页。因此,启用弹跳和子类UIScrollView,在那里覆盖setContentOffset以防止弹跳。 (真正启用弹跳将会带来相当不寻常的用户体验)

答案 2 :(得分:1)

看看Apple's PageControl sample code。它相当简短,易于理解,因此您将获得设置项目的要点,在水平滑动时加载多个视图控制器。

一旦进行了此设置,视图控制器就有责任加载自己的内容(在您的情况下,是图像)。在解决分页等问题之前,您应该确保了解如何首先加载图像(使用线程等)。

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

祝你好运!