【问题标题】:UIViews with UIPageControl带有 UIPageControl 的 UIViews
【发布时间】:2011-01-21 20:01:54
【问题描述】:

在页面控制方面我是初学者,这就是为什么我不确定 100% 是否我的标题与我想要的一致。我想制作一个 UIPageControl,当用户在屏幕上滑动时,视图会切换到另一个视图,并且屏幕底部的 UIPageController 会自行更新。此外,为了使我的请求更加混乱,我希望在屏幕底部有一个标签栏,它会随着视图的变化而保持不变。

The Iconfactory 的 Ramp Champ 就是一个很好的例子: http://img.slidetoplay.com/screenshots/ramp-champ_5.jpg

底部的栏保持不动,而屏幕上的其余项目移动。最简单的方法是什么?

编辑:我知道我必须使用 UISrollView,但我只是不知道如何实现它......

【问题讨论】:

    标签: iphone objective-c ios uiview uipagecontrol


    【解决方案1】:

    我相信您正在寻找的实际上是一个UIScrollView,其中 pagingEnabled 设置为 YES。您可以将滚动视图保留为常规 UITabBar 上方的视图。您将使用 UIPageControl 来获取小点。当 UIScrollView 滚动到页面时,您可以通过实现滚动视图的适当委托方法以编程方式更新它,也许是 -scrollViewDidScroll:。

    假设您有两个 ivars:scrollView 和 pageControl。当您知道您的滚动视图将有多少页时,您可以设置滚动视图的 contentSize。它应该是滚动视图边界的倍数。例如,如果页面数是静态的,您可以在 -viewDidLoad 中对其进行硬编码...

    - (void)viewDidLoad {
        // Any other code.
    
        scrollView.pagingEnabled = YES;
        scrollView.contentSize = CGSizeMake(scrollView.bounds.size.width * 3, scrollView.bounds.size.height); // 3 pages wide.
        scrollView.delegate = self;
    }
    

    然后,更新你的小点...

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
        CGFloat pageWidth = scrollView.bounds.size.width;
        NSInteger pageNumber = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
        pageControl.currentPage = pageNumber;
    }
    

    【讨论】:

    • 谢谢,您有任何关于如何执行此操作的源代码吗? (我找不到)
    • @Andy B,也许您应该在当前尝试中发布一些代码......“不工作”到底是什么意思?
    • 没关系,我发现这个教程可能对我有帮助:ykyuen.wordpress.com/2010/05/22/…
    【解决方案2】:

    您需要使用UIScrollView

    假设你有一个名为 scrollView 的命名 ivar

        int amountOfFrames = 10;
        scrollView.pagingEnabled = TRUE;
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * amountOfFrames, scrollView.frame.size.height);
         scrollView.delegate = self;
    

    然后您需要实现所需的委托方法,以便您可以更新页面控件

    - (void)scrollViewDidScroll:(UIScrollView *)sender 
    {
        // Switch the indicator when more than 50% of the previous/next page is visible
        CGFloat pageWidth = scrollView.frame.size.width;
        int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
        pageControl.currentPage = page; 
    }
    

    你需要在这些滚动视图中放置你想要滚动的任何内容,最好是延迟加载到其中,如果你要显示的内容需要大量的堆内存,使用 scrollviewDidScroll 在需要的位置删除和添加内容

    【讨论】:

    • 感谢您的帮助,但这对我来说意义不大。我现在只开发了大约七个月。有源代码吗?
    猜你喜欢
    • 2018-11-09
    • 2014-08-21
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多