9

我已经为此搜索并搜索了一个教程,但它们都不是我想要的。我已经尝试过 Apple 的示例,但它只是颜色,我不知道如何让它显示。我正在寻找的只是一个在显示页面控件时会分页的屏幕。每次滚动视图页面时,我都希望它显示完全不同的视图。不是不同的文本或图像,而是不同的视图。很像 iPhone 或 ESPN Scorecenter 应用程序的主屏幕。请帮忙!谢谢你。

4

5 回答 5

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));
}
于 2013-01-09T08:04:29.647 回答
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));
    }
}
于 2014-02-06T20:53:42.967 回答
4

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

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

您可以轻松: - 通过仅提供一组 url(图像 url)在单独的线程中从 Internet 下载图像 - 给它一个 UIImage 对象数组 - 实现一个委托并自己管理每个页面的图像

于 2012-05-11T20:19:25.623 回答
1

有一个相关的问题:如何使用 UIPageControl 创建多个视图?,这个博客文章解释了一个非常好的方法:http: //cocoawithlove.com/2009/01/multiple-virtual-pages-in-uiscrollview.html

于 2010-10-05T19:27:31.117 回答
1

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

于 2014-03-20T08:44:52.690 回答