3

我使用的是UIPageViewContoller創建一個類似書本的翻頁體驗處理。我的書的頁面比iPhone屏幕的整個寬度窄18px,並且錨定在屏幕的左側。然後,將我的UIPageViewController視圖的框架設置爲這些頁面的框架大小(寬度:302,高度:460)。我這樣做的目的是讓圖書具有多個頁面,頁面轉向看起來像從當前可見頁面的邊緣開始,就像iBooks應用程序的體驗一樣。從一個視圖傳遞一個UIPanGestureRecognizer要通過另一種觀點認爲

我遇到的問題是,如果有人試圖通過從屏幕的最右側進行平移來翻過頁面,通過302 px點,則平移手勢不會被UIPageViewController捕獲,並且該頁面不會被轉動。我看過很多用戶試圖以這種方式翻頁,所以我想在不改變UI設計的情況下修復這種體驗。

我的想法是,我可以從該地區搶UIPanGesture的UIPageViewController之外,並把它傳遞給UIPageViewController。我已經使用圖像視圖成功捕獲了平移手勢,我已將其作爲整個視圖的背景,但我無法弄清楚如何將手勢傳遞給UIPageViewController以處理翻頁。

- (void) viewDidLoad { 
...  

    // Add a swipe gesture recognizer to grab page flip swipes that start from the far right of the screen, past the edge of the book page 
    self.panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:nil] autorelease]; 
    [self.panGesture setDelegate:self]; 
    [self.iv_background addGestureRecognizer:self.panGesture]; 

    //enable gesture events on the background image 
    [self.iv_background setUserInteractionEnabled:YES]; 

... 
} 


#pragma mark - UIGestureRecognizer Delegates 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    // test if our control subview is on-screen 
    if (self.pageController.view.superview != nil) { 
     if (gestureRecognizer == self.panGesture) { 
      // we touched background of the BookViewController, pass the pan to the UIPageViewController 
      [self.pageController.view touchesBegan:[NSSet setWithObject:touch] withEvent:UIEventTypeTouches]; 

      return YES; // handle the touch 
     } 
    } 
    return YES; // handle the touch 
} 
+0

你找到一個方法來做到這一點?我正在嘗試類似的東西。我有一個媒體子視圖,其中有形狀。我想將一個形狀拖出子視圖,然後繼續在主畫布視圖上拖動它。 – scooter133 2012-02-14 15:27:24

+0

還沒有解決方案,我希望這篇文章很快就會獲得一些愛。 – chazzwozzer 2012-03-20 02:52:12

+0

我見過幾個應用程序。 By Current認爲TopView上的手勢是透明的,然後通過較低的目標視圖。手勢然後將其座標轉換爲上視圖,並確定在該視圖中實際點擊的內容,創建拖動圖像然後移動它。只是在這一點上的想法。 – scooter133 2012-03-20 14:54:25

回答

3

UIPageViewController有一個gestureRecognizers屬性。該文件似乎來形容你尋找什麼:

gestureRecognizers

配置爲處理 用戶交互UIGestureRecognizer對象的數組。 (只讀)

@屬性(非原子,只讀)的NSArray * gestureRecognizers

討論

這些手勢識別最初附着到視圖中 頁面視圖控制器的層次結構。 改變屏幕的區域中 其中用戶可以使用手勢導航,可以將它們放置在 另一視圖。

狀況

可用在IOS 5.0和更高版本。宣佈

UIPageViewController.h

+0

謝謝!我之前對PageViewController的gestureRecognizers數組很熟悉,但我不知道爲什麼我沒有試圖用UIPageViewController的ViewController視圖的手勢識別器替換它。用一條線解決的問題'viewDidLoad中:' 'self.view.gestureRecognizers = self.pageController.gestureRecognizers;' – chazzwozzer 2012-06-08 00:35:57

+0

謝謝!Chazzwozzer的代碼片段做了訣竅。感謝您指引我們走向正確的方向。 – 2013-03-15 23:03:07

相關問題