将 UIPageControl 添加到 UIScrollView

Posted

技术标签:

【中文标题】将 UIPageControl 添加到 UIScrollView【英文标题】:Add UIPageControl to UIScrollView 【发布时间】:2013-12-10 20:36:36 【问题描述】:

我有一个包含 5 张图片的 UIScrollView。我想在滚动视图的底部添加一个 UIPageControl,以便用户可以看到他们所在的页面。

这是我的滚动视图代码:

self.helpScrollView.contentSize = CGSizeMake(320 * 5, 436);

UIImageView *image1 = [[UIImageView alloc] initWithFrame:CGRectMake(320 * 0, 0, 320, 436)];
image1.image = [UIImage imageNamed:[NSString stringWithFormat:
                                   @"Guide Page One.png"]];
[self.helpScrollView addSubview:image1];

UIImageView *image2 = [[UIImageView alloc] initWithFrame:CGRectMake(320 * 1, 0, 320, 436)];
image2.image = [UIImage imageNamed:[NSString stringWithFormat:
                                    @"Guide Page Two.png"]];
[self.helpScrollView addSubview:image2];

UIImageView *image3 = [[UIImageView alloc] initWithFrame:CGRectMake(320 * 2, 0, 320, 436)];
image3.image = [UIImage imageNamed:[NSString stringWithFormat:
                                    @"Guide Page Three.png"]];
[self.helpScrollView addSubview:image3];

UIImageView *image4 = [[UIImageView alloc] initWithFrame:CGRectMake(320 * 3, 0, 320, 436)];
image4.image = [UIImage imageNamed:[NSString stringWithFormat:
                                    @"Guide Page Four.png"]];
[self.helpScrollView addSubview:image4];

UIImageView *image5 = [[UIImageView alloc] initWithFrame:CGRectMake(320 * 4, 0, 320, 436)];
image5.image = [UIImage imageNamed:[NSString stringWithFormat:
                                    @"Guide Page Five.png"]];
[self.helpScrollView addSubview:image5];

self.helpScrollView.pagingEnabled = true;
self.helpScrollView.showsHorizontalScrollIndicator = NO;

我已将 UIPageControl 拖到我的 xib 文件中的滚动视图上,但我不知道如何链接它们。我该怎么做?

【问题讨论】:

【参考方案1】:

您不想将UIPageControl 添加到滚动视图本身,因为您不希望它随内容滚动。

话虽如此,请看一下UIScrollViewDelegate 协议,特别是scrollViewDidEndDecelerating:,它将在您的滚动视图停止移动时调用(这是更新您的UIPageControl 的好时机)。

你的计算会是这样的......

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
   self.pageControl.currentPage = floorf(scrollView.contentOffSet.x/320);

Re:我在一个视图控制器中有两个滚动视图,那么这是否指定了我使用的是哪一个?

传入的scrollView 实例可用于协商哪个滚动视图确实结束了减速。如果您为两个滚动视图设置了delegate 属性,则当其中任何一个结束减速时都会调用此属性,因此您需要验证哪个实例结束减速。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
   if (scrollView == self.helpScrollView) 
       self.pageControl.currentPage = floorf(scrollView.contentOffset.x/scrollView.frame.size.width);
   

【讨论】:

我在 scrollViewDidScroll 中更新我的页面控件以获得响应更快的页面控件,但任何一个都可以工作(我的只是需要更多的处理能力)。 是的,你也可以在那里做。 我在一个视图控制器中有两个滚动视图,那么这是否指定了我使用的是哪一个? 好像方法被调用了,但是看不到我的UIPageControl? 你确定它实际上是在滚动视图的“上方”(z-index)吗?在大纲视图中,它应该列在您的滚动视图下方(之后)。

以上是关于将 UIPageControl 添加到 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

排队UIButton的CenterYAnchor到UIPageControl Swift

在 iOS 中为 UIPageControl 添加约束时 UIScrollView 不滚动

如何在全屏 ChildViewController 上显示 UIPageControl?

在 UIPageControl 中为点添加边框

UIPageController 与 UIPageControl 结合使用?

Swift 的 UIPageControl