サーチ…


前書き

UIPageViewControllerは、ユーザーにスワイプジェスチャーを使用して複数のビュー間を簡単に遷移させる機能を提供します。 UIPageViewControllerを作成するには、UIPageViewControllerDataSourceメソッドを実装する必要があります。これには、現在のUIPageViewControllerの前後にあるUIPageViewControllerと、presentationCountメソッドおよびpresentationIndexメソッドの両方を返すメソッドが含まれます。

構文

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

備考

Apple Developerのリファレンスはこちら

プログラマチックに水平ページングUIPageViewControllerを作成する

  1. 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];
  1. UIPageViewControllerインスタンスを作成します。
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                         options:nil];
  1. データソースはUIPageViewControllerDataSourceプロトコルを実装する必要がある現在のクラスです。
pageViewController.dataSource = self;
  1. setViewControllersは最初のView Controllerのみを追加し、次にデータソースメソッドを使用してスタックに追加されます
if (viewControllers.count) {
    [pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
                                 direction:UIPageViewControllerNavigationDirectionForward
                                  animated:NO
                                completion:nil];
}
  1. 子ビューコントローラーとしてUIPageViewControllerを追加し、親ビューコントローラーのappearancerotationイベントから受信するようにします。
 [self addChildViewController:pageViewController];
 pageViewController.view.frame = self.view.frame;
 [self.view addSubview:pageViewController.view];
 [pageViewController didMoveToParentViewController:self];
  1. 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. インデックスを使用してView Controllerを返すユーティリティメソッド。インデックスが範囲外の場合はnilを返します。
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
    if (index <= ([viewControllers count] - 1)) {
        return [viewControllers objectAtIndex:index];
    } else {
        return nil;
    }
}

水平ページビューコントローラ(無限ページ)を作成する簡単な方法は、

  1. 私は新しいプロジェクトを作りましょう、より良いデモンストレーションのためにシングルビューアプリケーションを選んでいます

ここに画像の説明を入力

  1. ページビューコントローラーをストーリーボードにドラッグすると、それ以降に変更する必要がある2つのことがあります:
    1. ページビューコントローラを初期ビューコントローラとして設定する
    2. スクロールするトランジションスタイルを変更する

ここに画像の説明を入力

  1. また、UIPageViewControllerクラスを作成し、それをストーリーボード上のページビューコントローラのカスタムクラスとして設定する必要があります

  2. あなたの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