6

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

一个很好的例子是 Iconfactory 的斜坡冠军:http: //img.slidetoplay.com/screenshots/ramp-champ_5.jpg

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

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

4

2 回答 2

22

我相信您正在寻找的实际上是一个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;
}
于 2011-01-21T20:06:58.417 回答
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 在所需位置删除和添加内容

于 2011-01-21T21:28:13.997 回答