Buscar..


Introducción

UIPageViewController brinda a los usuarios la capacidad de realizar fácilmente la transición entre varias vistas mediante un gesto de deslizamiento. Para crear un UIPageViewController, debe implementar los métodos UIPageViewControllerDataSource. Estos incluyen métodos para devolver tanto el UIPageViewController antes y después del UIPageViewController actual junto con los métodos presentationCount y presentationIndex.

Sintaxis

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

Observaciones

Referencia de desarrollador de Apple aquí

Crear una paginación horizontal UIPageViewController programáticamente

  1. Arreglo inicial de controladores de vista que serán administrados por UIPageViewController. Agregue una clase de controlador de vista base que tenga un identifier propiedad que se usará para identificar controladores de vista cuando trabaje con métodos de fuente de datos UIPageViewController. Deje que los controladores de vista hereden de esa clase 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. Crear instancia de UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                         options:nil];
  1. La fuente de datos es la clase actual que debe implementar el protocolo UIPageViewControllerDataSource .
pageViewController.dataSource = self;
  1. setViewControllers agregará solo el controlador de la primera vista, luego se agregará a la pila usando métodos de fuente de datos
if (viewControllers.count) {
    [pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
                                 direction:UIPageViewControllerNavigationDirectionForward
                                  animated:NO
                                completion:nil];
}
  1. Añadir UIPageViewController como un controlador de vista del niño por lo que va a recibir de su padre vista del controlador de appearance y la rotation los acontecimientos.
 [self addChildViewController:pageViewController];
 pageViewController.view.frame = self.view.frame;
 [self.view addSubview:pageViewController.view];
 [pageViewController didMoveToParentViewController:self];
  1. Implementando los métodos 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étodo de utilidad que devuelve un controlador de vista utilizando un índice, si el índice está fuera de los límites, devuelve cero.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
    if (index <= ([viewControllers count] - 1)) {
        return [viewControllers objectAtIndex:index];
    } else {
        return nil;
    }
}

Una forma sencilla de crear controladores de vista de página horizontales (páginas infinitas)

  1. Vamos a crear un nuevo proyecto, estoy eligiendo la aplicación de vista única para una mejor demostración

introduzca la descripción de la imagen aquí

  1. Arrastre un controlador de vista de página al guión gráfico, hay dos cosas que debe cambiar después de eso:
    1. Establecer el controlador de vista de página como controlador de vista inicial
    2. Cambia el estilo de transición para desplazarte

introduzca la descripción de la imagen aquí

  1. Y necesita crear una clase UIPageViewController, luego configurarlo como clase personalizada del controlador de vista de página en el guión gráfico

  2. Pegue este código en su clase UIPageViewController, debería obtener una aplicación paginada infinita y colorida :)

    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
        }
    }
    

Así es como se ve el proyecto final, obtienes un controlador de vista con un color diferente con cada desplazamiento:

introduzca la descripción de la imagen aquí



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow