I am using UIPageViewController to display two view controllers simultaneously. After showing several of these views, I want to show individual view controllers without changing the orientation, it is attached to the landscape. I am making an iPad.
Below is the code I use for this:
-(id)initWithViewControllers:(NSMutableArray *)Controllers { self = [super initWithNibName:nil bundle:nil]; if(self) { self.VControllers = Controllers; pageController = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation: UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pageController.view.frame = CGRectMake(12.0f, 10.0f, 748.0f, 985.0f); self.pageController.delegate = self; self.pageController.dataSource = self; [self.pageController setViewControllers:[NSArray arrayWithObject:[VControllers objectAtIndex:0] ] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) { }]; [self addChildViewController:self.pageController]; [self.view addSubview:self.pageController.view]; } return self; } - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation { if(UIInterfaceOrientationIsPortrait(orientation)) { //Set the array with only 1 view controller UIViewController *currentViewController = [self.pageController.viewControllers objectAtIndex:0]; NSArray *viewControllers = [NSArray arrayWithObject:currentViewController]; [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; //Important- Set the doubleSided property to NO. self.pageController.doubleSided = NO; //Return the spine location return UIPageViewControllerSpineLocationMin; } else { NSArray *viewControllers = nil; exampleViewController *currentViewController = [self.pageController.viewControllers objectAtIndex:0]; NSUInteger currentIndex = [self.VControllers indexOfObject:currentViewController]; if(currentIndex == 0 || currentIndex %2 == 0) { UIViewController *nextViewController = [self pageViewController:self.pageController viewControllerAfterViewController:currentViewController]; viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil]; } else { UIViewController *previousViewController = [self pageViewController:self.pageController viewControllerBeforeViewController:currentViewController]; viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil]; } //Now, set the viewControllers property of UIPageViewController [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; return UIPageViewControllerSpineLocationMid; } } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { int index = [self.VControllers indexOfObject:viewController]; //[self checkViewControllers]; if (index - 1 >= 0) { ind = index; return [self.VControllers objectAtIndex:index - 1]; } ind = index; return nil; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { int index = [self.VControllers indexOfObject:viewController]; //[self checkViewControllers]; if (index + 1 < [self.VControllers count]) { ind = index; return [self.VControllers objectAtIndex:index + 1]; } ind = index; return nil; }
I need to show separate view controllers after double viewing double views. I can’t activate this functionality yet. Can anyone be guided by this.
Thanks in advance.
source share