如何将UIScrollview与UIPagecontrol结合使用以显示不同的视图?

时间:2010-08-20 16:52:48

标签: iphone uiscrollview uipagecontrol

我搜索并搜索了一个教程,但这些都不是我想要的。我试过Apple的样本,但它只是颜色,我不知道如何使它的观点。我正在寻找的是一个屏幕,在显示页面控件时会翻页。每次滚动视图页面我希望它显示完全不同的视图。不同的文字或图像,但不同的视图。很像iPhone的主屏幕或ESPN Scorecenter应用程序。请帮忙! 谢谢。

5 个答案:

答案 0 :(得分:16)

我创建了这个通用的解决方案,因为发现的例子很复杂,这对我来说是可读的,代码应该是自我解释的。

- (IBAction)changePage:(id)sender {
    _pageControlUsed = YES;
    CGFloat pageWidth = _scrollView.contentSize.width /_pageControl.numberOfPages;
    CGFloat x = _pageControl.currentPage * pageWidth;
    [_scrollView scrollRectToVisible:CGRectMake(x, 0, pageWidth, _scrollView.frame.size.height) animated:YES];
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    _pageControlUsed = NO;
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (!_pageControlUsed)
            _pageControl.currentPage = lround(_scrollView.contentOffset.x /
            (_scrollView.contentSize.width / _pageControl.numberOfPages));
}

答案 1 :(得分:14)

这与@ReneDohan的答案相同,无需变量来存储状态

- (IBAction)changePage:(id)sender {
    CGFloat x = self.pageControl.currentPage * self.scrollView.frame.size.width;
    [self.scrollView setContentOffset:CGPointMake(x, 0) animated:YES];
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.isDragging || scrollView.isDecelerating){
        self.pageControl.currentPage = lround(self.scrollView.contentOffset.x / (self.scrollView.contentSize.width / self.pageControl.numberOfPages));
    }
}

答案 2 :(得分:4)

尝试使用此框架:https://github.com/AdrianFlorian/AFImageViewer使用页面控件在滚动视图中显示图像以指示当前页面。

我还没有添加文档,但是如果克隆项目,可以看到示例。

您可以轻松地:      - 通过仅提供一系列网址(图片网址)从单独的线程中下载互联网上的图像      - 给它一个UIImage对象数组      - 实现委托并自己管理每个页面的图像

答案 3 :(得分:1)

有一个相关的问题:How do I use UIPageControl to create multiple views?,这个博客文章中解释了一个非常好的方法:http://cocoawithlove.com/2009/01/multiple-virtual-pages-in-uiscrollview.html

答案 4 :(得分:1)

我为这个问题制作了一个演示项目。请拜访: https://github.com/lenhhoxung86/PageControlDemo