iOS
UIPageViewController
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
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
Observaciones
Referencia de desarrollador de Apple aquí
Crear una paginación horizontal UIPageViewController programáticamente
- 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];
- Crear instancia de UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- La fuente de datos es la clase actual que debe implementar el protocolo
UIPageViewControllerDataSource
.
pageViewController.dataSource = self;
-
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];
}
- 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 larotation
los acontecimientos.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- 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;
}
- 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)
- Vamos a crear un nuevo proyecto, estoy eligiendo la aplicación de vista única para una mejor demostración
- Arrastre un controlador de vista de página al guión gráfico, hay dos cosas que debe cambiar después de eso:
- Establecer el controlador de vista de página como controlador de vista inicial
- Cambia el estilo de transición para desplazarte
Y necesita crear una clase UIPageViewController, luego configurarlo como clase personalizada del controlador de vista de página en el guión gráfico
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: