UIPageViewController的用法

在地鐵上看到看小說的翻頁效果,研究了一下,發現蘋果自帶翻頁神器UIPageViewController

UIPageViewController一些常用的屬性:

  • 首頁展示的頁面的個數
typedef NS_ENUM(NSInteger, UIPageViewControllerSpineLocation) {
    UIPageViewControllerSpineLocationNone = 0, // Returned if 'spineLocation' is queried when 'transitionStyle' is not 'UIPageViewControllerTransitionStylePageCurl'.
    UIPageViewControllerSpineLocationMin = 1,  // Requires one view controller.
    UIPageViewControllerSpineLocationMid = 2,  // Requires two view controllers.
    UIPageViewControllerSpineLocationMax = 3   // Requires one view controller.
};   // Only pertains to 'UIPageViewControllerTransitionStylePageCurl'.
  • 翻頁方式
typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationDirection) {

UIPageViewControllerNavigationDirectionForward, //從左往右(或從下往上)翻頁

UIPageViewControllerNavigationDirectionReverse //從右往左(或從上往下)翻頁

};
  • 翻轉的樣式
typedef NS_ENUM(NSInteger, UIPageViewControllerTransitionStyle) {

UIPageViewControllerTransitionStylePageCurl = 0, //翻書效果樣式

UIPageViewControllerTransitionStyleScroll = 1 //類似Scrollview的滑動效果

};

  • 上下或者左右翻頁的枚舉
typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationOrientation) {

UIPageViewControllerNavigationOrientationHorizontal = 0, //水平

UIPageViewControllerNavigationOrientationVertical = 1 //垂直

};

常用的用法

  • 遵循page協議
@interface ViewController : UIViewController<UIPageViewControllerDelegate,UIPageViewControllerDataSource>
@end
  • 初始化pageController
    NSDictionary *options =[NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin] forKey: UIPageViewControllerOptionSpineLocationKey];
    
    _pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options];
    
    _pageViewController.delegate = self;
    _pageViewController.dataSource = self;
    _pageViewController.doubleSided = NO;
    [self addChildViewController:_pageViewController];
    [self.view addSubview:_pageViewController.view];
    
    UIViewController *vc = [self createViewController:0];
//首頁的效果
    [_pageViewController setViewControllers:@[vc]
                                  direction:UIPageViewControllerNavigationDirectionReverse
                                   animated:YES
                                 completion:nil];
    
    [self.datas addObject:vc];
    
    for (int i = 0; i < 10; i++) {
        
        [self.datas addObject:[self createViewController:i]];
  • 翻到下一頁
  //下一頁
- (nullable UIViewController *) pageViewController:(nonnull UIPageViewController *)pageViewController viewControllerAfterViewController:(nonnull UIViewController *)viewController {
    NSInteger index = [self.datas indexOfObject:viewController];
    index ++;
    if (index == self.datas.count ) {
        return nil;
    }
    
    return [self.datas objectAtIndex:index];
}
  • 上一頁
-(nullable UIViewController *) pageViewController:(nonnull UIPageViewController *)pageViewController viewControllerBeforeViewController:(nonnull UIViewController *)viewController {
    NSInteger index = [self.datas indexOfObject:viewController];
    index --;
    if (index < 0) {
        return nil;
    }
    
    return [self.datas objectAtIndex:index];
}
  • 返回頁控制器中頁的數量
-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    return self.datas.count;
}

//返回頁控制器中當前頁的索引
-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return 0;
}
  • 屏幕旋轉代理方法,旋轉方式
- (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{
    return UIPageViewControllerSpineLocationMin;
}

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers
{
    NSLog(@"將要翻頁也就是手勢觸發時調用方法");
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容