【问题标题】:Add UIPageControl to UIScrollView将 UIPageControl 添加到 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 文件中的滚动视图上,但我不知道如何链接它们。我该怎么做?

【问题讨论】:

    标签: ios objective-c uiscrollview uipagecontrol


    【解决方案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)吗?在大纲视图中,它应该列在您的滚动视图下方(之后)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多