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

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

Osservazioni

Riferimento per gli sviluppatori Apple qui

Creare un UIPageViewController di paginazione orizzontale programmaticamente

  1. 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];
  1. Crea un'istanza UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                         options:nil];
  1. L'origine dati è la classe corrente che deve implementare il protocollo UIPageViewControllerDataSource .
pageViewController.dataSource = self;
  1. 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];
}
  1. Aggiungere UIPageViewController come un controller di vista del bambino in modo che riceverà dal suo genitore View Controller appearance e rotation eventi.
 [self addChildViewController:pageViewController];
 pageViewController.view.frame = self.view.frame;
 [self.view addSubview:pageViewController.view];
 [pageViewController didMoveToParentViewController:self];
  1. 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;
}
  1. 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)

  1. Creiamo un nuovo progetto, sto scegliendo l'applicazione Single View per una migliore dimostrazione

inserisci la descrizione dell'immagine qui

  1. Trascina un controller di visualizzazione pagina nello storyboard, ci sono 2 cose che dovresti cambiare dopo:
    1. Imposta il controller della visualizzazione della pagina come controller della vista iniziale
    2. Cambia lo stile di transizione per scorrere

inserisci la descrizione dell'immagine qui

  1. E devi creare una classe UIPageViewController, quindi impostarla come classe personalizzata del controller della visualizzazione della pagina nello storyboard

  2. 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:

inserisci la descrizione dell'immagine qui



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow