? ? ? ?UIPageViewController我感覺就是相當(dāng)于一個(gè)控制器,來控制一組viewControllers的轉(zhuǎn)換和現(xiàn)實(shí)救拉,在這里就不多說他的實(shí)現(xiàn)機(jī)制了。
? ? ? 首先的第一步忱嘹,就是來實(shí)現(xiàn)它的數(shù)據(jù)源和代理方法映凳,來做到基本的展示,然后再來考慮翻頁的問題,(UIPageViewControllerDataSource , UIPageViewControllerDelegate)兩個(gè)代理的實(shí)現(xiàn)過后畏鼓,你會(huì)在這里看到這兩個(gè)數(shù)據(jù)源方法
- ( UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerBeforeViewController:(UIViewController*)viewController;
- (UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerAfterViewController:(UIViewController*)viewController;
很明顯就是用來控制翻頁的數(shù)據(jù)源處理酱酬,我也考慮過在這里進(jìn)行禁止的寫法,但是如果我還有一個(gè)collectionView視圖來控制翻頁的滾動(dòng)云矫,相當(dāng)于兩個(gè)視圖之間的聯(lián)動(dòng)效果膳沽,那么我就需要加入判斷,來控制顯示的邏輯,這樣做的話挑社,拓展性就很差陨界。而且寫代碼盡量是簡潔,所以在數(shù)據(jù)源方法里加入一些多余的邏輯痛阻,我覺得會(huì)影響代碼的美觀程度菌瘪。這樣做,很不合適阱当,耦合性也會(huì)很高俏扩,不夠簡單,也不通用弊添。在網(wǎng)上也找了一些方法都是用過录淡,手勢來解決的,我覺得監(jiān)聽手勢的方式先不說好不好用油坝,首先就會(huì)覺得麻煩嫉戚,容錯(cuò)率太低。這讓我懷念起scrollView視圖的scrollEnable的方法澈圈,真是又簡單彬檀,又方便。但是UIPageViewController并沒有暴漏出這個(gè)屬性出來极舔,只要找到了這個(gè)屬性凤覆,那么就好解決了。不說廢話了拆魏,先上關(guān)鍵代碼盯桦。。渤刃。拥峦。。
- (UIScrollView *)findScrollView{
? ? ? ? ? ? ? ?UIScrollView*scrollView; ?
? ? ? ? ? ? ? ?for(id subview in self.view.subviews){
? ? ? ? ? ? ? ? ? ? ? ? ? ? if([subview isKindOfClass:UIScrollView.class]){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?scrollView=subview;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ?}}
? ? ? ? ? ? ? return ?scrollView;
}
就是這一小段代碼來解決scrollView的獲取卖子,想繼續(xù)深入的小伙伴可以查一下UIQueuingScrollView略号。 這個(gè)scrollView就是UIPageViewController用來做滾動(dòng)效果的視圖,你要想控制一些滾動(dòng)效果洋闽,就可以修改這個(gè)scrollView的屬性玄柠。所以我通過設(shè)置UIQueuingScrollView.scrollEnable = NO;就解決了翻頁的問題诫舅,而且絕對通用羽利。
如果你有多個(gè)滾動(dòng)視圖,那么也很好辦刊懈,就是UIQueuingScrollView.delegate = self; 在UIScrollViewDelegate當(dāng)中的 scrollDIdScroll 方法做一些處理这弧,反正娃闲,只要獲得了這個(gè)scrollView我就可以做很多事情~~