Recherche…


Introduction

UIPageViewController permet aux utilisateurs de faire facilement la transition entre plusieurs vues en utilisant un geste de balayage. Pour créer un UIPageViewController, vous devez implémenter les méthodes UIPageViewControllerDataSource. Celles-ci incluent des méthodes pour retourner à la fois le UIPageViewController avant et après le UIPageViewController actuel avec les méthodes presentationCount et presentationIndex.

Syntaxe

  1. UIPageViewControllerTransitionStyle
  2. UIPageViewControllerNavigationOrientation
  3. UIPageViewControllerSpineLocation
  4. UIPageViewControllerNavigationDirection

Remarques

Référence du développeur Apple ici

Créez un UIPageViewController de pagination horizontale par programmation

  1. Init tableau des contrôleurs de vue qui seront gérés par UIPageViewController. Ajoutez une classe de contrôleur de vue de base qui possède un identifier propriété qui sera utilisé pour identifier les contrôleurs de vue lors de l'utilisation des méthodes de source de données UIPageViewController. Laissez les contrôleurs de vue hériter de cette classe de base.
UIViewController *firstVC = [[UIViewController alloc] init]; 
firstVC.identifier = 0  
UIViewController *secondVC = [[UIViewController alloc] init];   
secondVC.identifier = 1
NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
  1. Créez l'instance UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                         options:nil];
  1. La source de données est la classe en cours qui doit implémenter le protocole UIPageViewControllerDataSource .
pageViewController.dataSource = self;
  1. setViewControllers ajoutera uniquement le premier contrôleur de vue, ensuite sera ajouté à la pile à l'aide de méthodes de source de données
if (viewControllers.count) {
    [pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
                                 direction:UIPageViewControllerNavigationDirectionForward
                                  animated:NO
                                completion:nil];
}
  1. Ajoutez UIPageViewController en tant que contrôleur de vue enfant pour qu'il reçoive des événements d' appearance et de rotation contrôleur de la vue parent.
 [self addChildViewController:pageViewController];
 pageViewController.view.frame = self.view.frame;
 [self.view addSubview:pageViewController.view];
 [pageViewController didMoveToParentViewController:self];
  1. Implémentation des méthodes UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerBeforeViewController:(UIViewController *)viewController
{
    index = [(Your View Controler Base Class *)viewController identifier];
    index--;
    return [self childViewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
{
    index = [(Your View Controler Base Class *)viewController identifier];
    index++;
    return [self childViewControllerAtIndex:index];
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    return [viewControllers count];
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return index;
}
  1. Méthode utilitaire qui renvoie un contrôleur de vue à l'aide d'un index, si l'index est hors limites, il renvoie nil.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
    if (index <= ([viewControllers count] - 1)) {
        return [viewControllers objectAtIndex:index];
    } else {
        return nil;
    }
}

Un moyen simple de créer des contrôleurs de vue de page horizontaux (pages infinies)

  1. Créons un nouveau projet, je choisis l'application Single View pour une meilleure démonstration

entrer la description de l'image ici

  1. Faites glisser un contrôleur de vue de page sur le storyboard, il y a 2 choses à changer après cela:
    1. Définir le contrôleur de vue de page en tant que contrôleur de vue initial
    2. Changer le style de transition pour faire défiler

entrer la description de l'image ici

  1. Et vous devez créer une classe UIPageViewController, puis la définir comme classe personnalisée du contrôleur de vue de page sur le storyboard

  2. Collez ce code dans votre classe UIPageViewController, vous devriez obtenir une application paginée infinie colorée :)

    class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
    
        override func viewDidLoad() {
            self.dataSource = self
            let controller = createViewController()
            self.setViewControllers([controller], direction: .forward, animated: false, completion: nil)
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            let controller = createViewController()
            return controller
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            let controller = createViewController()
            return controller
        }
    
        func createViewController() -> UIViewController {
            var randomColor: UIColor {
                return UIColor(hue: CGFloat(arc4random_uniform(360))/360, saturation: 0.5, brightness: 0.8, alpha: 1)
            }
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "View Controller")
            controller.view.backgroundColor = randomColor
            return controller
        }
    }
    

Voici à quoi ressemble le projet final: vous obtenez un contrôleur de vue de couleur différente avec chaque rouleau:

entrer la description de l'image ici



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow