【问题标题】:How do you combine UIScrollview with UIPagecontrol to show different views?如何结合 UIScrollview 和 UIPagecontrol 来显示不同的视图?
【发布时间】:2011-04-01 18:35:48
【问题描述】:

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

【问题讨论】:

    标签: iphone uiscrollview uipagecontrol


    【解决方案1】:

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

    - (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));
    }
    

    【讨论】:

    • 其实,请看@datinc 的回答。非常干净和简单。
    • @Rene Dohan 如何在单击 changePage 和 scrollViewDidEndDecelerating 上获得相同的效果。 zip 滚动图像的 zip 运动同样具有点击页面控件。
    • @ReneDohan 绝对!我真的很喜欢这样!我只指出了另一个解决方案,因为你的投票太多了,恕我直言,新的答案更好。 :-)
    • 我仍然使用这个解决方案,因为我喜欢 DidEndDecelerating 在事件中只被调用一次,而不是在 scrollViewDidScroll 中多次调用......这可能会产生一些其他不需要的后果......
    【解决方案2】:

    这与@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));
        }
    }
    

    【讨论】:

    • 太棒了!当我将滚动视图委托连接到视图控制器时,这对我有用。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-01
          • 2019-01-11
          • 1970-01-01
          • 1970-01-01
          • 2015-09-02
          • 2011-07-02
          • 2012-12-01
          • 1970-01-01
          相关资源
          最近更新 更多