iOS
UIPageViewController
Ricerca…
introduzione
UIPageViewController offre agli utenti la possibilità di passare facilmente da una vista all'altra usando un gesto di scorrimento. Per creare un UIPageViewController, è necessario implementare i metodi UIPageViewControllerDataSource. Questi includono metodi per restituire sia UIPageViewController prima e dopo l'attuale UIPageViewController insieme ai metodi presentationCount e presentationIndex.
Sintassi
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
Osservazioni
Riferimento per gli sviluppatori Apple qui
Creare un UIPageViewController di paginazione orizzontale programmaticamente
- Init array of view controller che sarà gestito da UIPageViewController. Aggiungere una classe controller di visualizzazione di base che abbia
identifier
proprietà che verrà utilizzato per identificare i controller di visualizzazione quando si lavora con i metodi dell'origine dati UIPageViewController. Lascia che i controller di visualizzazione ereditino da quella classe 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];
- Crea un'istanza UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- L'origine dati è la classe corrente che deve implementare il protocollo
UIPageViewControllerDataSource
.
pageViewController.dataSource = self;
-
setViewControllers
aggiungerà solo il controller della prima vista, successivamente verrà aggiunto allo stack utilizzando i metodi di origine dei dati
if (viewControllers.count) {
[pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
}
- Aggiungere UIPageViewController come un controller di vista del bambino in modo che riceverà dal suo genitore View Controller
appearance
erotation
eventi.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- Implementazione dei metodi 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;
}
- Metodo di utilità che restituisce un controller di visualizzazione utilizzando un indice, se l'indice è fuori dai limiti restituisce nulla.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
if (index <= ([viewControllers count] - 1)) {
return [viewControllers objectAtIndex:index];
} else {
return nil;
}
}
Un modo semplice per creare controller di visualizzazione di pagina orizzontali (pagine infinite)
- Creiamo un nuovo progetto, sto scegliendo l'applicazione Single View per una migliore dimostrazione
- Trascina un controller di visualizzazione pagina nello storyboard, ci sono 2 cose che dovresti cambiare dopo:
- Imposta il controller della visualizzazione della pagina come controller della vista iniziale
- Cambia lo stile di transizione per scorrere
E devi creare una classe UIPageViewController, quindi impostarla come classe personalizzata del controller della visualizzazione della pagina nello storyboard
Incolla questo codice nella tua classe UIPageViewController, dovresti ottenere una colorata app a pagine infinite :)
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 } }
Ecco come si presenta il progetto finale, ottieni un controller di visualizzazione con colori diversi ad ogni scorrimento: