使用UIPageControl的UIViews

时间:2011-01-21 20:01:55

标签: iphone objective-c ios uiview uipagecontrol

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

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

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

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

2 个答案:

答案 0 :(得分:22)

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

假设您有两个ivars:scrollView和pageControl。当您知道滚动视图将包含多少页面时,您可以设置scrollView的contentSize。它应该是scrollView的边界的倍数。例如,如果页面数是静态的,您可以在-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;
}

答案 1 :(得分: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; 
}

您需要在这些scrollview中放置您想要滚动的任何内容,理想情况下是lazyload,如果您要显示的内容需要大量堆内存,请使用scrollviewDidScroll删除并在所需位置添加内容< / p>