UIPageviewController - switch from two-page mode to one-page mode without changing orientation

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.

+2
source share
1 answer

You cannot change the display of two pages on one page without changing the orientation.

What you can do is create your own container and handle the transitions yourself. This is simpler than it looks, although I cannot provide any sample code from myself.

However, I can show some tutorials that I could find with some search queries:

If you want the page rotation effect to look here .

With this, you will be able to show how many view controllers you want, and when to change it. And you can even animate when you do this.

0
source

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


All Articles