ios – UIPageViewController页面指示器位置

最近我编写了关于UIPageViewController的这个小教程:
http://www.appcoda.com/uipageviewcontroller-tutorial-intro/

在本教程之后,我想知道是否可以将页面指示器的位置更改为屏幕顶部.

有谁知道怎么样?

编辑

到目前为止,感谢您的帮助.我关注这篇文章
How to put the UIPageControl element on top of the sliding pages within a UIPageViewController?

现在我将页面控件置于顶部,但发生了一些奇怪的事情:
如果从第1页滑动到第2页,则指示符表示用户在第3页上.
我放入一个NSLog,它显示当前索引,并在从0到1而不是2时滑动到下一页时更改.

有人知道为什么吗?

现行代码

@property (weak,nonatomic) IBOutlet UIPageControl *pageControl;

@end

@implementation APPViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationorientation:UIPageViewControllerNavigationorientationHorizontal options:nil];

    self.pageController.dataSource = self;
    [[self.pageController view] setFrame:[[self view] bounds]];

    APPChildViewController *initialViewController = [self viewControllerAtIndex:0];

    NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];

    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    [self addChildViewController:self.pageController];
    [[self view] addSubview:[self.pageController view]];
    [self.pageController didMovetoParentViewController:self];
    UIPageControl *pageControl = [UIPageControl appearance];
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor orangeColor];
    [self.view bringSubviewToFront:self.pageControl];


    //Or whatever number of viewcontrollers you have
    [self.pageControl setNumberOfPages:5];

    }

- (APPChildViewController *)viewControllerAtIndex:(NSUInteger)index {

    APPChildViewController *childViewController = [[APPChildViewController alloc] initWithNibName:@"APPChildViewController" bundle:nil];
    childViewController.index = index;

    return childViewController;

}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {

    NSUInteger index = [(APPChildViewController *)viewController index];

    if (index == 0) {
        return nil;
    }

    // Decrease the index by 1 to return
    index--;
    [self.pageControl setCurrentPage:index];

    return [self viewControllerAtIndex:index];

}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {

    NSUInteger index = [(APPChildViewController *)viewController index];

    index++;
    [self.pageControl setCurrentPage:index];

    if (index == 5) {
        return nil;
    }

    return [self viewControllerAtIndex:index];

}

AppChildViewController:

@property (assign,nonatomic) NSInteger index;    
- (void)viewDidLoad {

        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
        switch(self.index)
        {
            case zero: {
                self.imageView.image = [UIImage imageNamed:@"page1.png"];
                NSLog(@"%d",self.index);
                break;
            }
            case one: {
                self.imageView.image = [UIImage imageNamed:@"page2.png"];
                NSLog(@"%d",self.index);
                break;
            }
            case two: {
                self.imageView.image = [UIImage imageNamed:@"page3.png"];
                NSLog(@"%d",self.index);
                break;
            }
            case three: {
                self.imageView.image = [UIImage imageNamed:@"page4.png"];
                NSLog(@"%d",self.index);
                break;
            }
            default: {
                self.imageView.image = [UIImage imageNamed:@"page5.png"];
                NSLog(@"%d",self.index);
                break;
            }
        }
    }

解决方法

在我们的应用程序中,我将页面指示器放在页面视图控制器视图的顶部,方法是将视图翻转过来.这真的很傻,除非你有信心,否则我不建议使用这种技术.它是这样的:

[pageWrapperView setTransform:CGAffineTransformRotate([pagingView transform],M_PI)];

页面视图控制器的视图是pageWrapperView的子视图.

那么你也需要翻转内容视图,所以它们是正确的方式.

我有a demo on Github where this technique is used to put a tab bar at the top of the screen.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...