當前位置:成語大全網 - 書法字典 - iOS的UIPageViewController解釋了翻頁視頻控制器。

iOS的UIPageViewController解釋了翻頁視頻控制器。

壹.導言

UIPageViewController是iOS中罕見的動畫視圖控制器之壹。通過它,您可以創建類似於UIScrollView和UIPageControl組合的滾動視圖,還可以創建類似於圖書效果的炫酷翻頁視圖。

UIPageViewController最初是在iOS 5 SDK中引入的,它使開發人員能夠使用此ViewController創建分頁視圖。在iOS 6中,該類已更新為支持滾動過渡效果。使用頁面視圖,用戶可以通過手勢輕松在多個頁面之間導航。UIPage ViewController不僅用於引導頁面,許多遊戲(如憤怒的小鳥)都使用PageView來顯示關卡選擇的頁面,也有與書籍相關的應用程序使用該類來顯示書籍的頁面。

UIPageViewController是壹個高度可配置的類,您可以按如下方式配置它:

翻頁方向-水平或垂直翻頁樣式-書籍翻頁或滑動翻頁書脊位置-僅書籍翻頁樣式對頁面間距有效-僅滑動翻頁樣式對定義頁間間距有效。

UIPageViewController類似於壹個視圖容器,其中每個特定的視圖都由其自己的ViewController維護和管理,UIPageViewController只負責協調和制作動畫。下圖可以很好地展示UIPageViewControlelr的使用結構:

在上圖中,UIPageViewControllerDataSource協議為UIPageViewController提供數據支持,DataSource協議提供的數據由每個ViewController維護。UIPageViewControllerDelegate中的回調可以監視翻頁和屏幕旋轉。UIPageViewController將從DataSource獲取的視圖數據呈現到視圖中,以顯示當前視圖控制器。

為了演示,我們將壹起創建壹個簡單的應用程序。當然,我們不會演示UIPageViewController的所有配置細節,但我們將演示使用滑動翻頁樣式創建指南頁面。但是不要擔心,在對UIPageViewController有了基本了解之後,我相信您可以探索其他功能。

開始吧!

其次,創建壹個UIPageViewController。

首先,在翻頁視圖控制器中創建壹個新的類作為每個頁面視圖的控制器,並使其從UIViewController繼承:

ModelViewController.h

#導入

@ interface ModelViewController:UIViewController

+(ModelViewController *)creatWithIndex:(int)index;

@property(非原子,強)UILabel * indexLabel

@end

ModelViewController.m

#導入“ModelViewController.h“

@接口模型視圖控制器()

@end

@實現模型視圖控制器

+(ModelViewController *)creatWithIndex:(int)index {

ModelViewController * con =【【ModelViewController alloc】init】;

con . index label =【【UILabel alloc】initWithFrame:CGRectMake(110,200,100,30)】;

con . index label . text =【ns string string with format:@“page % d“,index】;

【con . view addSubview:con . index label】;

返回con

}

-(void)viewDidLoad {

【超級viewDidLoad】;

//加載視圖後進行任何其他設置。

self . view . background color =【ui color red color】;

}

@end

在項目模板附帶的ViewController.m文件中實現以下代碼:

#導入“ViewController.h“

#導入“ModelViewController.h“

//遵守協議

@界面視圖控制器()

{

//翻頁視圖控制器對象

UIPageViewController * _ pageview control;

//數據源數組

NSMutableArray * _ dataArray

}

@end

@實現視圖控制器

-(void)viewDidLoad {

【超級viewDidLoad】;

//初始化

_ pageviewcontroll =【【UIPageViewController alloc】initwithstransitionstyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:uipageviewcontrolleraviationorientationhorizontal options:@ { U IPageViewControllerOptionSpineLocationKey:@ 0,UIPageViewControllerOptionInterPageSpacingKey:@ 10 }】;

self . view . background color =【ui color green color】;

//設置翻頁視圖的大小。

_ pageview control . view . bounds = self . view . bounds;

//設置數據源和代理

_ pageview control . data source = self;

_ pageviewcontrol . delegate = self;

//創建初始接口

ModelViewController * model =【ModelViewController creatWithIndex:1】;

//設置初始界面

【_ pageViewControl setViewControllers:@【model】direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil】;

//設置是否雙面顯示。

_ pageviewcontrol . double sided = NO;

_ data array =【【NSMutableArray alloc】init】;

【_ data array add object:model】;

【self . view addSubview:_ pageview control . view】;

}

//翻頁控制器向前翻頁。此數據源方法返回的視圖控制器是顯示視圖的視圖控制器。

-(可為null的UIViewController *)page view controller:(UIPageViewController *)page view controller viewController beforeviewcontroller:(UIViewController *)view controller {

int index =(int)【_ data array indexOfObject:view controller】;

if(index = = 0 ){

返回零;

}否則{

return _ data array【index-1】;

}

}

//翻頁控制器執行向後翻頁動作。此數據源方法返回的視圖控制器是顯示視圖的視圖控制器。

-(可為null的UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewController(UIViewController *)view controller {

int index =(int)【_ data array indexOfObject:view controller】;

if(index = = 9 ){

返回零;

}否則{

if(_ data array . count-1 & gt;=(index+1)({

return _ data array【index+1】;

}否則{

ModelViewController * model =【ModelViewController creatWithIndex:index+2】;

【_ data array add object:model】;

回報模型;

}

}

}

//屏幕旋轉觸發的代理方法

-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spinelocationforinterface orientation:(uiinterface orientation)orientation {

返回uipageviewcontrollerspinectionmin;

}

//設置尋呼控制器的尋呼號碼。

-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {

返回10;

}

//設置初始分頁點

-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {

返回0;

}

@end

上面創建了翻頁視圖控制器的最簡單示例,效果如下:

第三,分析UIPageViewController中的方法用法

//創建翻頁視圖控制器對象

-(instance type)initwithstransitionstyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation選項:(可為null的NSDictionary*)選項;

上述方法用於創建視圖控制器對象,其中UIPageViewControllerTransitionStyle參數設置翻頁控制器的樣式,枚舉如下:

typedef NS _ ENUM(NSInteger,UIPageViewControllerTransitionStyle ){

UipageviewControllerTransitionstylePagecurl = 0,//類似於翻書的效果。

UipageviewControllerTransitionStyleScroll = 1//類似於ScrollView的滑動效果。

};

如果設置為UIPageView ControllerTransitionStyleCurl,翻頁效果如下圖所示:

上面初始化方法中的UIPageViewControllerNavigationOrientation屬性設置翻頁的方向,枚舉如下:

typedef NS _ ENUM(NSInteger,UIPageViewControllerNavigationOrientation ){

UipageviewControllerNavigationOrientationHorizontal = 0,//水平翻頁。

UipageviewControllerNavigationOrientationVertical = 1//垂直翻頁。

};

options參數用於設置翻頁查看控制器的配置字典,可以設置的配置鍵值如下:

//該鍵需要設置為UIPageViewControllerOptionsPinelocationKey枚舉值對應的` NSNumber對象,翻頁控制器的書軸稍後設置。

ns string * const uipageviewcontrolleroptions spinelocationkey;

//該鍵需要設置為NSNumber類型,以設置滾動視圖樣式的每個頁面視圖的間距。

ns string * const UIPageViewControllerOptionInterPageSpacingKey;

以下是UIPageViewController的壹些常見屬性和方法:

//設置數據源

@property(可空、非原子、弱)iddelegate。

//設置代理

@property(可空、非原子、弱)iddataSource。

//獲取翻頁樣式

@ property(nonatomic,readonly)UIPageViewControllerTransitionStyle transitionStyle;

//獲取翻頁方向

@ property(nonatomic,readonly)UIPageViewControllerNavigationOrientation navigation orientation;

//獲取滾動類型

@ property(nonatomic,readonly)UIPageViewControllerSpineLocation spine location;

//設置是否雙面顯示。

@ property(nonatomic,getter = is doubleSided)BOOL doubleSided;

//設置要顯示的視圖控制器。

-(void)setviewcontrollers:(nullable nsarray *)view controllers方向:(uipageviewcontrollernavigationdirection)方向動畫:(BOOL)動畫完成:(void(^ _ _ nullable)(bool完成))完成;

只有上面的spineLocation屬性有點難以理解,其枚舉如下:

typedef NS _ ENUM(NSInteger,UIPageViewControllerSpineLocation ){

//對於SCrollView類型的滑動效果,不滾動將返回以下枚舉值。

uipageviewcontrollerspinectionnone = 0,

//向左或向上旋轉界面,同壹時間只顯示壹個視圖。

UIPageViewControllerSpineLocationMin = 1,

//以中間為軸翻轉界面時,可以同時顯示兩個視圖。

UIPageViewControllerSpineLocationMid = 2,

//以下邊緣或右邊緣為軸翻轉界面,同時只顯示壹個視圖。

UIPageViewControllerSpineLocationMax = 3

};

將上面的示例代碼修改如下:

-(void)viewDidLoad {

【超級viewDidLoad】;

//在加載視圖後進行任何額外的設置,通常從筆尖進行。

_ pageViewControl =【【UIPageViewController alloc】initwithstransitionstyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation vertical options:@ { U IPageViewControllerOptionSpineLocationKey:@ 2,UIPageViewControllerOptionInterPageSpacingKey:@ 10 }】;

self . view . background color =【ui color green color】;

_ pageview control . view . bounds = self . view . bounds;

_ pageview control . data source = self;

_ pageviewcontrol . delegate = self;

ModelViewController * model =【ModelViewController creatWithIndex:1】;

ModelViewController * model 2 =【ModelViewController creatWithIndex:2】;

【_ pageViewControl setViewControllers:@【model,model 2】direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil】;

_ pageviewcontrol . double sided = YES;

_ data array =【【NSMutableArray alloc】init】;

【_ data array add object:model】;

【self . view addSubview:_ pageview control . view】;

}

-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spinelocationforinterface orientation:(uiinterface orientation)orientation {

返回uipageviewcontrollerspinectionmid;

}

操作效果如下圖所示:

第四,UIPageViewControllerDataSource中的方法分析

//向前翻頁以顯示ViewController。

-(可空UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewController:(UIViewController *)view controller;

//翻頁以顯示ViewController。

-(可為null的UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewController:(UIViewController *)view controller;

//設置尋呼控制器的尋呼號碼。

-(NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController NS _ AVAILABLE _ IOS(6 _ 0);

//設置當前分頁控制器的高亮點。

-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController NS _ AVAILABLE _ IOS(6 _ 0);

第五,UIPageViewControllerDelegate的方法分析

//翻頁視圖控制器即將翻頁時要執行的方法。

-(void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers NS _ AVAILABLE _ IOS(6 _ 0);

//翻頁動畫完成後回調方法。

-(void)pageViewController:(UIPageViewController *)pageViewController did finishinyamating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transition completed:(BOOL)completed;

//對於屏幕防線更改時返回的方法,可以通過返回值重置book軸類型枚舉。

-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spinelocationforinterface orientation:(uiinterfaceortion)orientation;