2012-11-05 110 views
4

我有一個UIPageViewController可以處理翻開我的「書」的頁面。但是,每個書頁都是ViewControllerUIScrollViewsubview。由於contentSizeUIScrollView只能夠垂直滾動。問題在於,當用戶垂直滾動scrollview時,由於scrollview仍在滾動/減速,用戶無法翻頁。看到這個的一個非常簡單的方法是滾動頁面,然後嘗試點擊視圖的邊緣。這通常會改變頁面,並且當scrollview沒有移動時它確實改變頁面。但是,當它移動時,水龍頭會導致滾動視圖停止移動,而不是翻頁。UIScrollView在滾動時取消UIPageViewController手勢

如果UIPageViewController試圖通過點擊或平移頁面以使頁面轉動動畫嘗試使用手勢來轉動頁面,我該如何取消scrollviews手勢?

有關我想要實現的行爲的示例,請查看iPhone上Twitter的官方客戶端。 可以從時間線滑動到Discover,而饋送仍然從滾動中減速。

+0

你能分享一個包含這種情況的演示應用程序嗎? – souvickcse

回答

-1

我有同樣的問題,我的工作方式...在我的情況下,我有PDF啓用縮放。所以,我有,例如:

[scrollView setMaximumZoomScale:6]; 
[scrollView setMinimumZoomScale:1]; 
當我初始化控制器及其滾動視圖,並且僅僅是每一次後,我改變方向或頁面我改變縮放以適應頁面的寬度,只有當變焦

是「遠」

CGFloat desiredWidth = scrollView.frame.size.width/pdfRect.size.width; 
if (desiredWidth>[self zoomScale]) { 
    [scrollView setZoomScale:desiredWidth animated:YES]; 
} 

我希望它能幫助

+0

嗯。有類似的問題。但Apple的Photoscroller示例不需要將元素縮放到頁面寬度以翻頁。 – deepwinter

0

UIGestureRecognizer類有可能通過使用requireGestureRecognizerToFail:方法來設置其他手勢識別器的依賴。

for (UIGestureRecognizer *gestureRecognizer in pageController.gestureRecognizers) { 
    for (ViewController *viewController in viewControllers) { 
     for (UIGestureRecognizer *gestureRecognizerForFail in viewController.scrollView.gestureRecognizers) { 
      [gestureRecognizerForFail requireGestureRecognizerToFail:gestureRecognizer]; 
     } 
    } 
} 
1

一個UIScrollView滾動事件將阻止其他UIView動畫,所以在Twitter上的情況下,他們很可能刷之前取消滾動的一瞬間:
你的情況,這種方法可以在這種方式來使用風景。正如你問你的問題:

「如果UIPageViewController試圖通過點擊或平移頁面以使頁面轉動動畫使用手勢來轉動頁面,我如何取消滾動視圖手勢?」

我會提出一個解決方法。

不是依靠UIPageViewController的固有UIPanGestureRecognizer的,包括在頁面視圖自己UIPanGestureRecognizer所以當在頁面的適當部分檢測到平移和適當的方向進行,即新UIPanGestureRecognizer覆蓋UIPageViewController那's UIGestureRecognizer s並觸發必要的操作。具體而言,您需要:

(1)暫停使用

CGPoint offset = scrollView.contentOffset; 
[scrollView setContentOffset:offset animated:NO]; 

(2)將頁面滾動動畫編程方式使用

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

這樣既滾動動畫將暫停,而頁面翻轉在一個流體平移手勢內完成。

相關問題