UIPageViewController學(xué)習(xí)

UIPageViewController可用于管理多個平行關(guān)系的viewCOntroller,提供頁面滑動和很炫的翻頁效果,可用于引導(dǎo)頁切換。

配置屬性

UIPageViewController可以配置多個屬性進行展示,

名稱 含義
navigationOrientation 導(dǎo)航的方向:水平or垂直 UIPageViewControllerNavigationOrientationHorizontal、UIPageViewControllerNavigationOrientationVertical
transitionStyle 翻頁的過渡樣式:類似書頁翻卷或者Scroll滑動 UIPageViewControllerTransitionStylePageCurl、UIPageViewControllerTransitionStyleScroll
spineLocation 書脊位置,只有書頁翻卷效果時有效; UIPageViewControllerSpineLocationNone:無書脊、UIPageViewControllerSpineLocationMin:根據(jù)導(dǎo)航方向,位于屏幕左側(cè)或頂部、UIPageViewControllerSpineLocationMid:位于屏幕中部,同時顯示兩個頁面、UIPageViewControllerSpineLocationMax:根據(jù)導(dǎo)航方向,位于屏幕右側(cè)或底部
doubleSided 屏幕是否顯示兩個頁面,當spineLocation為mid時,其值需設(shè)為Yes 默認為no

初始化

a) UIPageViewController初始化方法

- (instancetype)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style
                  navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation
                                options:(NSDictionary<NSString *,id> *)options

參數(shù)style對應(yīng)上述文中transitionStyle,navigationOrientation對應(yīng)導(dǎo)航方向,options是可選的,但只可以是UIPageViewControllerOptionSpineLocationKey和UIPageViewControllerOptionInterPageSpacingKey組成的字典.

  1. UIPageViewControllerOptionSpineLocationKey:定義書脊位置,只有其transitionStyle選為UIPageViewControllerTransitionStylePageCurl才有效
  2. UIPageViewControllerOptionInterPageSpacingKey:定義兩個頁面的間距,只有其transitionStyle選為UIPageViewControllerTransitionStyleScroll才有效

b) 設(shè)置UIPageViewController初始顯示的viewController

- (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers
                 direction:(UIPageViewControllerNavigationDirection)direction
                  animated:(BOOL)animated
                completion:(void (^)(BOOL finished))completion

參數(shù)direction值分為UIPageViewControllerNavigationDirectionForward(水平導(dǎo)航時為從左向右,垂直方向時為從上到下)、
UIPageViewControllerNavigationDirectionReverse(水平導(dǎo)航時為從右向左,垂直方向時為從下到上)

DataSource

UIPageViewControllerDataSource提供了四個方法,兩個是@required,兩個是@optional

@required
//返回前一個頁面;如果返回為nil,則會認為當前頁面不可以向前滾動或翻頁
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerBeforeViewController:(UIViewController *)viewController
//返回后一個頁面;如果返回為nil,則會認為當前頁面不可以向后滾動或翻頁    
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController

@optional
//返回頁面總數(shù)
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
//返回默認展示的頁面index
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController

需要注意的是@optional中的方法是和頁面指示器(Page Indicator)相對應(yīng)的,實現(xiàn)了這兩個方法,才可以顯示Page Indicator;同時Page Indicator是在scroll過渡效果下顯示。

Delegate

UIPageViewControllerDelegate定義了五個方法

//開始滾動或者翻頁時執(zhí)行
- (void)pageViewController:(UIPageViewController *)pageViewController
willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers
//結(jié)束滾動或者翻頁時執(zhí)行
- (void)pageViewController:(UIPageViewController *)pageViewController
        didFinishAnimating:(BOOL)finished
   previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers
       transitionCompleted:(BOOL)completed
//在書頁翻卷效果和旋轉(zhuǎn)屏幕時執(zhí)行,可以根據(jù)屏幕旋轉(zhuǎn)方向設(shè)置書脊位置和初始化首頁
- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
                   spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation

//支持的屏幕類型                   
- (UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController *)pageViewController
- (UIInterfaceOrientation)pageViewControllerPreferredInterfaceOrientationForPresentation:(UIPageViewController *)pageViewController

實現(xiàn)效果

類似于scroll滾動效果如下圖:


滾動效果

類似于書卷翻頁效果如下圖:


滾動效果

具體實現(xiàn)可以移步代碼

可以利用UIPageControl修改page indicator,具體如下

UIPageControl *pageControl = [UIPageControl appearance];
pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
pageControl.backgroundColor = [UIColor whiteColor];

參考資料

Page View Controllers

UIPageViewController

UIPageViewController - Xcode 6.2 iOS 8.2 Tutorial

UIPageViewController in iOS

UIPageViewController教程

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

推薦閱讀更多精彩內(nèi)容