我正在尝试使用水平滚动创建一个应用程序,以便能够在一系列图像中水平滚动。我观看了WWDC Session 104视频,虽然他们制作了一个有趣的应用程序,但他们很快就完成了它的基础知识。
我理解使用UIScrollView,我必须启用分页。之后他们说我应该添加更多视图作为scrollview的子视图,但我不清楚如何做到这一点。我也不清楚如何将我的图像添加到这些视图中。
你可能会说我在这方面很新,所以任何帮助都会受到赞赏。
答案 0 :(得分:12)
您想查看UIImageView。这是专门用于保存图像的视图。
添加图片时,您需要设置自己的版本(可能每个initWithFrame:
使用UIImageView
),以便:
即。每个图像都是前一个320像素。
最后一步是为contentSize
设置UIScrollView
- 这是CGSize
,它描述了滚动视图的总大小。
如果您有3张图像,则可以使用例如
将其设置为(320 * 3)* 480myScrollView.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。它相当简短,易于理解,因此您将获得设置项目的要点,在水平滑动时加载多个视图控制器。
一旦进行了此设置,视图控制器就有责任加载自己的内容(在您的情况下,是图像)。在解决分页等问题之前,您应该确保了解如何首先加载图像(使用线程等)。
将其视为两个独立的任务。视图控件负责加载和显示图像。带分页的滚动视图只是告诉适当的视图控制器何时加载自身(它不关心视图控制器加载后的作用)
祝你好运!