iOS
UIPageViewController
サーチ…
前書き
UIPageViewControllerは、ユーザーにスワイプジェスチャーを使用して複数のビュー間を簡単に遷移させる機能を提供します。 UIPageViewControllerを作成するには、UIPageViewControllerDataSourceメソッドを実装する必要があります。これには、現在のUIPageViewControllerの前後にあるUIPageViewControllerと、presentationCountメソッドおよびpresentationIndexメソッドの両方を返すメソッドが含まれます。
構文
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
備考
Apple Developerのリファレンスはこちら
プログラマチックに水平ページングUIPageViewControllerを作成する
- UIPageViewControllerによって管理されるView Controllerの配列を初期化します。 UIPageViewControllerデータソースメソッドを操作するときにView Controllerを識別するために使用されるプロパティ
identifier
を持つベースビューコントローラクラスを追加します。ビューコントローラがその基本クラスから継承するようにします。
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
は最初のView Controllerのみを追加し、次にデータソースメソッドを使用してスタックに追加されます
if (viewControllers.count) {
[pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
}
- 子ビューコントローラーとしてUIPageViewControllerを追加し、親ビューコントローラーの
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;
}
- インデックスを使用してView Controllerを返すユーティリティメソッド。インデックスが範囲外の場合はnilを返します。
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
if (index <= ([viewControllers count] - 1)) {
return [viewControllers objectAtIndex:index];
} else {
return nil;
}
}
水平ページビューコントローラ(無限ページ)を作成する簡単な方法は、
- 私は新しいプロジェクトを作りましょう、より良いデモンストレーションのためにシングルビューアプリケーションを選んでいます
- ページビューコントローラーをストーリーボードにドラッグすると、それ以降に変更する必要がある2つのことがあります:
- ページビューコントローラを初期ビューコントローラとして設定する
- スクロールするトランジションスタイルを変更する
また、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 } }
最終的なプロジェクトは次のようになります。すべてのスクロールで異なる色のビューコントローラを取得します。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow