如何结合 UIScrollview 和 UIPagecontrol 显示不同的视图?
Posted
技术标签:
【中文标题】如何结合 UIScrollview 和 UIPagecontrol 显示不同的视图?【英文标题】:How to combine UIScrollview with UIPagecontrol to show different views? 【发布时间】:2010-12-09 23:29:26 【问题描述】:我已经为此搜索并搜索了一个教程,但它们都不是我想要的。我已经尝试过 Apple 的示例,但它只是颜色,我不知道如何让它显示。我正在寻找的只是一个在显示页面控件时会分页的屏幕。每次滚动视图页面时,我都希望它通过按钮显示完全不同的视图,很像 iPhone 的主屏幕。我发现下面的示例代码非常适用于图像,但我想修改以使用单独的视图。请帮忙!谢谢。
- (void)setupPage
scrollView.delegate = self;
[self.scrollView setBackgroundColor:[UIColor clearColor]];
[scrollView setCanCancelContentTouches:NO];
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
NSUInteger nimages = 0;
CGFloat cx = 0;
for (; ; nimages++)
NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", (nimages + 1)];
UIImage *image = [UIImage imageNamed:imageName];
if (image == nil)
break;
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect rect = imageView.frame;
rect.size.height = image.size.height;
rect.size.width = image.size.width;
rect.origin.x = ((scrollView.frame.size.width - image.size.width) / 2) + cx;
rect.origin.y = ((scrollView.frame.size.height - image.size.height) / 2);
imageView.frame = rect;
[scrollView addSubview:imageView];
[imageView release];
cx += scrollView.frame.size.width;
self.pageControl.numberOfPages = nimages;
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
【问题讨论】:
我不确定为什么需要分页控件,因为滚动视图内置了一个。如果您尝试在滚动视图中创建页面控件,那么您需要像使用图像视图 @Burf2000:UIScrollView
什么时候带有UIPageControl
?
【参考方案1】:
前几天我正在试验这个。我仍然习惯于使用UIScrollView
,但您可以通过以下方式将视图添加到您的UIScrollView
:
UIView *blueView = [[UIView alloc] init];
blueView.frame = CGRectMake(100, 0, 500, 1024);
blueView.backgroundColor = [UIColor colorWithRed:164.0/256 green:176.0/256 blue:224.0/256 alpha:1];
[scrollView addSubview:blueView];
[blueView release];
UIView *orangeView = [[UIView alloc] init];
orangeView.frame = CGRectMake(700, 0, 500, 1024);
orangeView.backgroundColor = [UIColor colorWithRed:252.0/256 green:196.0/256 blue:131.1/256 alpha:1];
[scrollView addSubview:orangeView];
[orangeView release];
请注意,我在每个视图的 frame.origin
中设置了 x
值,以便它们彼此相邻。您还必须使用[scrollView setContentSize:CGSizeMake(1200, 1024)];
之类的设置UIScrollView
的内容大小,以便它知道它的子视图有多大。
然后,如果您需要控制UIPageControl
,您可以将其numberOfPages
设置为2(对于上面的示例滚动视图)并更改其currentPage
属性。您可以通过实现scrollViewDidEndDecelerating:
来做到这一点,这是UIScrollViewDelegate
中的一个方法。您可以通过检查其contentOffset.x
值来检查滚动视图位于哪个“页面”。
希望这会有所帮助!
【讨论】:
这个概念的修改版本非常适合我。谢谢!【参考方案2】:这是带有图像的 Apple PageControl 代码。要使用,只需将图像拖到项目中即可。默认图片为image1.jpg、image2.jpg等,如果需要png,只需将扩展名改为.png即可。
然后用这段代码替换 MyViewController.m 代码,你就得到了带有图像的页面控件。
干杯,乔丹
http://pastebin.com/raw.php?i=c3hS29sC
【讨论】:
我正在尝试加载视图而不是图像。上面的代码已经适用于图像。谢谢。 您从哪里获得视图?您是从头开始创建它们,还是从 nibs 加载它们? 最好从笔尖加载它们。【参考方案3】:// 将 UIView 添加到 PageControl 示例
- (id)initWithPageNumber:(int)page
UIScreen *screen = [UIScreen mainScreen];
CGRect frame = [screen applicationFrame];
frame.origin.y=0;
if (self = [super initWithNibName:@"MyView" bundle:nil])
UIView *view = [[UIView alloc] initWithFrame:frame];
[self.view addSubview:view];
// Add whatever you want to the view here.
[view release];
pageNumber = page;
return self;
【讨论】:
【参考方案4】:这是另一个答案...
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"Views" owner:self options:nil];
infoView = [nibViews objectAtIndex:0];
[self.view addSubview:infoView];
那么你有你的看法。
干杯
【讨论】:
以上是关于如何结合 UIScrollview 和 UIPagecontrol 显示不同的视图?的主要内容,如果未能解决你的问题,请参考以下文章
iOS7 自动布局与 Tabbar 结合 UIScrollView 和可缩放 UIImageView 不起作用
UIScrollView与UIPageController结合使用实现轮播
UIScrollView 子视图在与 UITapGestureRecognizer 结合使用时释放(移除)内存