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];
[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;
}
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];
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;
}
}
}
source
share