2010-07-15 134 views
2

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

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

正如你可能会告诉我,我很新,所以任何帮助将不胜感激。

回答

12

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

当你把你的图片,你要设置自己的rects(可能使用initWithFrame:每个UIImageView),以便:

  • 第一图像以0,0
  • 第二图像是在320 ,0
  • 第三是在640,0(等)

即每幅图像的右上320像素。

最后一步是为您的UIScrollView设置contentSize - 这是一个CGSize,它描述了滚动视图的总大小。

如果您有3张图片,您可以使用例如(320 * 3)* 480将其设置为(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

假设你有“无限”的图像,把它们放在一个巨大的UIScrollView的启动时间或之前将不会是一个选项。 (对UIView的大小有限制)

我解决它的方法:制作一个覆盖整个屏幕的UIScrollView。它的内容应该是3 * 320宽度和480高度的UIView,向左扩展320px,向右扩展320px。

把3个UIImageView放在里面,左边,中间和右边。设置分页=是,所以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。 (真正启用弹跳会使用户体验相当不寻常)

1

看看Apple's PageControl sample code。它非常简短并且易于操作,因此您可以在设置项目时浏览水平滑动时加载多个视图控制器的项目。

一旦你有了这个设置,视图控制器的责任就是加载它自己的内容(在你的情况下,一个图像)。你应该确保你知道如何先加载图像(使用线程等),然后再解决分页问题等。

将其视为两个独立的任务。视图控件负责加载和显示图像。带有分页的滚动视图只是告诉相应的视图控制器何时加载自己(它并不关心视图控制器一旦加载了它)

祝你好运!