UIPageViewController Page Indicator Position

I recently coded this little tutorial on the UIPageViewController: http://www.appcoda.com/uipageviewcontroller-tutorial-intro/

After this tutorial, I wondered if I could reposition the page indicators at the top of the screen.

Does anyone know how?

EDIT

Thank you for your help. I followed this post: How to place a UIPageControl element on top of sliding pages in a UIPageViewController?

Now I have a page control on top, but some strange things happen: If you swipe from page 1 to page 2, the indicator indicates that the user is on page 3. I put in the NSLog, which shows me the current index, and it changes and then scrolls to the next page from 0 to 1, not to 2.

Does anyone know why?

Current code:

@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;
            }
        }
    }
+4
source share
3 answers

In our application, I place the page indicator at the top of the page view controllers view, turning the view upside down. This is really stupid, and I would not recommend using this technique if you are not sure. This happens something like this:

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

pageWrapperView.

, .

Github, , .

+1

, :

UIPageControl *pageControl = [UIPageControl alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
[self.view addSubView:pageControl];

... - ?

0

viewControllerAfterViewController viewControllerBeforeViewController, , .

pageViewController: didFinishAnimating:previousViewControllers:transitionCompleted:

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
    if (finished) {
        APPChildViewController *childViewController = [pageViewController.viewControllers firstObject];
        [self.pageControl setCurrentPage:childViewController.index];
    }
}
0
source

Source: https://habr.com/ru/post/1538133/


All Articles