3

私はこれに何時間も費やしましたが、うまくいきません。誰かが私を助けてくれることを願っています。

アプリケーションの起動時にデフォルトのビューに追加すると、完全に機能する UIPageViewController があります。これが私がすることです:

//Step 1
//Instantiate the UIPageViewController.
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

//Step 2:
//Assign the delegate and datasource as self.
self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;

//Step 3:
//Set the initial view controllers.
ContentViewController *contentViewController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil];
contentViewController.labelContents = [self.modelArray objectAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:contentViewController];
[self.pageViewController setViewControllers:viewControllers
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                 completion:nil];


[self addChildViewController:self.pageViewController];
[self.view addSubview: self.pageViewController.view];

ここで、ユーザーがボタンをクリックしたときに UIPageViewController をスタックにプッシュするナビゲーション コントローラーを初期ビューで使用したいと考えています。これも機能しますが、横向きモードの場合、UIPageViewController は 2 つではなく、1 つのページ (水平方向に引き延ばされている) のみを表示します。UIPageViewController に両方のページを表示させるには、デバイスを縦向きに回転させてから横向きモードに戻す必要があります。私は UIPageViewController をナビゲーションコントローラーに追加しています:

[self.navController pushViewController:self.pageViewController animated:NO];

コードをデバッグすると、ナビゲーション コントローラーがないと、起動時に UIPageViewController のデリゲート メソッドが呼び出されることがわかります。ナビゲーションコントローラーで UIPageViewController をプッシュすると、デバイスを回転させるまで呼び出されません。

これを解決する方法を知っている人はいますか?これに関するヘルプ/ヒントをお寄せいただきありがとうございます。

4

1 に答える 1

3

このスレッドの助けを借りてこれを理解しました。

重要なのは、オプション ディクショナリを使用して作成するときに、pageViewController に spinLocation を設定することです。

    options = [NSDictionary dictionaryWithObject: [NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid]
                                          forKey: UIPageViewControllerOptionSpineLocationKey];

このオプションは、現在のインターフェイスの向きを確認するチェックの中に入れる必要があります。

上記のスレッドでは、インターフェイスの向きは三項演算子によってチェックされます。これを if ステートメントに入れて、同じ機会を利用して追加の UIViewController を viewControllers 配列に追加できるようにします。

インターフェイスの向きが縦向きの場合、pageViewController の作成時に「options」は nil のままであるため、viewController が 1 つだけの縦向きモードで作成されます。

BookViewController の viewDidLoad コード全体を次に示します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    _modelController = [[ModelController alloc] init];

    DataViewController *startingViewController = [self.modelController viewControllerAtIndex:0
                                                                                  storyboard:self.storyboard];

    NSMutableArray *viewControllers = [NSMutableArray arrayWithObjects:
                                startingViewController,
                                nil];
    NSDictionary *options;
    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {

        DataViewController *secondViewController = [self.modelController viewControllerAtIndex:1
                                                                                    storyboard:self.storyboard];

        [viewControllers addObject:secondViewController];

        options = [NSDictionary dictionaryWithObject: [NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid]
                                              forKey: UIPageViewControllerOptionSpineLocationKey];
    }

    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                              navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                            options:options];
    self.pageViewController.delegate = self;

    [self.pageViewController setViewControllers:viewControllers
                                      direction:UIPageViewControllerNavigationDirectionForward
                                       animated:NO
                                     completion:NULL];

    self.pageViewController.dataSource = self.modelController;

    [self addChildViewController:self.pageViewController];
    [self.view addSubview:self.pageViewController.view];

    // Set the page view controller's bounds
    self.pageViewController.view.frame = self.view.bounds;

    [self.pageViewController didMoveToParentViewController:self];

    // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
    self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;

}
于 2012-09-14T17:55:05.783 に答える