iOS
UIPageViewController
Suche…
Einführung
Mit UIPageViewController können Benutzer mithilfe einer Wischgeste problemlos zwischen verschiedenen Ansichten wechseln. Um einen UIPageViewController erstellen zu können, müssen Sie die Methoden UIPageViewControllerDataSource implementieren. Dazu gehören Methoden, um sowohl den UIPageViewController als auch vor dem aktuellen UIPageViewController zusammen mit den Methoden presentationCount und presentationIndex zurückzugeben.
Syntax
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
Bemerkungen
Apple-Entwicklerreferenz hier
Erstellen Sie programmgesteuert einen horizontalen Paging-UIPageViewController
- Init Array von View-Controllern, die von UIPageViewController verwaltet werden. Hinzufügen eine Basis View - Controller - Klasse , die Eigenschaft hat
identifier
, die verwendet wird , um zu identifizieren , wenn Ansicht - Controller mit UIPageViewController Datenquelle Methoden arbeiten. Lassen Sie die View-Controller von dieser Basisklasse erben.
UIViewController *firstVC = [[UIViewController alloc] init];
firstVC.identifier = 0
UIViewController *secondVC = [[UIViewController alloc] init];
secondVC.identifier = 1
NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
- Erstellen Sie eine UIPageViewController-Instanz.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- Datenquelle ist die aktuelle Klasse, die das
UIPageViewControllerDataSource
Protokoll implementierenUIPageViewControllerDataSource
.
pageViewController.dataSource = self;
-
setViewControllers
fügt nur den ersten View-Controller hinzu, der nächste wird mithilfe von Datenquellenmethoden zum Stack hinzugefügt
if (viewControllers.count) {
[pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
}
- Fügen Sie UIPageViewController als untergeordneter Ansichts-Controller hinzu, damit er von seinem übergeordneten Ansichts-Controller-
appearance
undrotation
empfangen wird.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- Implementieren von UIPageViewControllerDataSource-Methoden
- (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;
}
- Dienstprogrammmethode, die einen View-Controller mit einem Index zurückgibt, wenn der Index außerhalb der Grenzen liegt, gibt er null zurück.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
if (index <= ([viewControllers count] - 1)) {
return [viewControllers objectAtIndex:index];
} else {
return nil;
}
}
Eine einfache Möglichkeit zum Erstellen horizontaler Seitenansichts-Controller (unendliche Seiten)
- Lassen Sie uns ein neues Projekt erstellen, wähle ich Single View Application zur besseren Demonstration
- Ziehen Sie einen Controller für die Seitenansicht auf das Storyboard. Es gibt zwei Dinge, die Sie danach ändern sollten:
- Legen Sie den Seitensichtcontroller als anfänglichen Viewcontroller fest
- Ändern Sie den Übergangsstil in einen Bildlauf
Sie müssen eine UIPageViewController-Klasse erstellen und diese dann als benutzerdefinierte Klasse des Seitensichtcontrollers im Storyboard festlegen
Fügen Sie diesen Code in Ihre UIPageViewController-Klasse ein. Sie sollten eine farbenfrohe, unendliche Seitenanwendung erhalten :)
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 } }
So sieht das endgültige Projekt aus: Mit jedem Bildlauf erhalten Sie einen View-Controller mit unterschiedlichen Farben: