UIPageViewController---iOSノート抜粋

5325 ワード

UIPageViewControlの作成
    //  UIPageViewController ,style: ( ), : ( )
    // style(2 ): pageCurl ,scroll 
    // orientation(2 ): , 
    // options(2 ):
    // UIPageViewControllerOptionSpineLocationKey( style ): 。
    /*
     UIPageViewControllerSpineLocationNone = 0, //  style 
     UIPageViewControllerSpineLocationMin = 1,  // Requires one view controller.
     UIPageViewControllerSpineLocationMid = 2,  // Requires two view controllers.
     UIPageViewControllerSpineLocationMax = 3   // Requires one view controller.
     }
     */
    // UIPageViewControllerOptionInterPageSpacingKey( style scrollview ):2 



    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil}];

    // dele,dataSource< UIPageViewControllerDelegate >< UIPageViewControllerDataSource >
    [self.pageViewController setDelegate:self]; 
    [self.pageViewController setDataSource:self]; 
    // bgColor
    [self.pageViewController.view setBackgroundColor:[UIColor whiteColor]];
    // frame
    [self.pageViewController.view setFrame:CGRectMake(0, 31, kScreenW, kScreenH-31)];
    //    VC( :Forward    Reverse )
    [_pageViewController setViewControllers:@[[self viewControllerAtIndex:0]]direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil];
    [self addChildViewController:_pageViewController];
    [self.view addSubview:_pageViewController.view];



    // readOnly
    [self.pageViewController transitionStyle];
    [self.pageViewController navigationOrientation];
    [self.pageViewController spineLocation];
    [self.pageViewController gestureRecognizers];
    [self.pageViewController viewControllers];

Delegate DataSource
#pragma mark UIPageViewControllerDelegate
//  ( View )
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{
    
    //  
    if (completed) {
        
        //  Controller
    previousViewControllers
        
        //  VC
    pageViewController.viewControllers.lastObject;
        //  VC
    pageViewController.viewControllers
    }
}//
-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{}
//
- (UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController *)pageViewController{}
//
- (UIInterfaceOrientation)pageViewControllerPreferredInterfaceOrientationForPresentation:(UIPageViewController *)pageViewController{}
//
-(void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers{}


#pragma mark UIPageViewControllerDataSource
//  VC
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
    NSUInteger index = [self indexOfViewController:viewController];
    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }
    self.currentIndex = index;
    index--;
    
    return [self viewControllerAtIndex:index];
}
//  VC
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
    //
    NSUInteger index = [self indexOfViewController:viewController];
    if (index == NSNotFound) {
        return nil;
    }
    self.currentIndex = index;
    index++;
    if (index == [self.pageContentArray count]) {
        return nil;
    }
    
    return [self viewControllerAtIndex:index];
}
//
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{}
//
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{}


ほじょほうしき
//  
- (UIViewController *)viewControllerAtIndex:(NSUInteger)index {
    //
    if (([self.pageContentArray count] == 0) || (index >= [self.pageContentArray count])){
        return nil;
    }
    UIViewController *contentVC = self.pageContentArray[index];
    
    return contentVC;
}
//  VC
- (NSUInteger)indexOfViewController:(UIViewController *)viewController{
    
    //
    __block NSInteger currentIdx = 0;
    [self.pageContentArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj isEqual:viewController]) {
            currentIdx = idx;
            *stop = YES;
        }
    }];
    return currentIdx;
}

//  
- (void)changeVC:(NSInteger )idx{
    
    //
    // 
    NSUInteger direction;
    if (_currentIndex>idx) {
        direction = UIPageViewControllerNavigationDirectionReverse;
    }else {
        direction = UIPageViewControllerNavigationDirectionForward;
    }
    [_pageViewController setViewControllers:@[_pageContentArray[idx]] direction:direction animated:YES completion:^(BOOL finished) {
        _currentIndex = idx;
    }];
}

データソース
 --- VC