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組成的字典.
- UIPageViewControllerOptionSpineLocationKey:定義書脊位置,只有其transitionStyle選為UIPageViewControllerTransitionStylePageCurl才有效
- 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];