iOS
UIPageViewController
Поиск…
Вступление
UIPageViewController предоставляет пользователям возможность легко переключаться между несколькими видами с помощью жестов салфетки. Чтобы создать UIPageViewController, вы должны реализовать методы UIPageViewControllerDataSource. К ним относятся методы возврата как UIPageViewController до, так и после текущего UIPageViewController вместе с методами presentationCount и presentationIndex.
Синтаксис
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
замечания
Ссылка Apple Developer здесь
Создавать горизонтальный пейджинг UIPageViewController
- Init массива контроллеров представлений, которые будут управляться UIPageViewController. Добавьте класс контроллера базового представления, который имеет
identifier
свойства, который будет использоваться для идентификации контроллеров представлений при работе с методами источника данных UIPageViewController. Пусть контроллеры представления наследуют этот базовый класс.
UIViewController *firstVC = [[UIViewController alloc] init];
firstVC.identifier = 0
UIViewController *secondVC = [[UIViewController alloc] init];
secondVC.identifier = 1
NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
- Создайте экземпляр UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- Источником данных является текущий класс, который должен реализовывать протокол
UIPageViewControllerDataSource
.
pageViewController.dataSource = self;
-
setViewControllers
добавит только первый контроллер представления, следующий будет добавлен в стек с использованием методов источника данных
if (viewControllers.count) {
[pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
}
- Добавьте UIPageViewController в качестве контроллера детского представления, чтобы он получал от него
appearance
вид контроллераappearance
и событияrotation
.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- Внедрение методов 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;
}
- Метод Utility, который возвращает контроллер представления с использованием индекса, если индекс не соответствует границам, он возвращает nil.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
if (index <= ([viewControllers count] - 1)) {
return [viewControllers objectAtIndex:index];
} else {
return nil;
}
}
Простой способ создания горизонтальных диспетчеров просмотра страниц (бесконечные страницы)
- Давайте создадим новый проект, я выбираю приложение Single View для лучшей демонстрации
- Перетащите контроллер просмотра страницы в раскадровку, после чего вам нужно изменить две вещи:
- Установите контроллер просмотра страницы в качестве начального контроллера представления
- Измените стиль перехода на прокрутку
И вам нужно создать класс UIPageViewController, а затем установить его как пользовательский класс контроллера просмотра страницы на раскадровке
Вставьте этот код в свой класс UIPageViewController, вы должны получить красочное бесконечное выгружаемое приложение :)
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 } }
Вот как выглядит последний проект, с каждым свитком вы получаете контроллер вида с разным цветом: