2012-01-26 41 views
4

我已經在Xcode 4中爲iPad iOS5創建了一個基於頁面的應用程序。基於頁面的應用程序和手勢識別器

當我運行應用程序時,我可以看到書中的頁面,並通過點擊屏幕或從左到右或從右到左移動手指來前後翻轉, 。

我的問題是,無論我在屏幕上按什麼位置,在邊框中,頁面都會變成。

我設法取消用手指翻頁使用此代碼:

for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers) 
{ 
    if ([gR isKindOfClass:[UIPanGestureRecognizer class]]) 
    { 
     [[gR view] removeGestureRecognizer:gR]; 
    } 
} 

我如何定義,當我在上面點擊屏幕的特定區域,只有它,頁面會轉向?

我問這是因爲我把工具欄放在屏幕的底部,當我點擊工具欄中的按鈕時,頁面翻轉。我想在屏幕上放2個箭頭,只有當我按下它們時,頁面纔會翻轉。

對不起,如果我的解釋有點生疏。謝謝你們。

回答

2

您可以掛入手勢系統並定義接受觸摸的區域。

在這個解釋,我認爲你的RootViewController的有UIPageViewController小時候VC:

- 設置你的根視圖控制器通過在RootViewControllers ViewDidLoad所有手勢識別您pageVC實施UIGestureRecognizerDelegate

-Take:

for (UIGestureRecognizer *gR in self.pageVC.gestureRecognizers) { 
    gR.delegate = self; 
} 

- 最後在您的RootViewController中實現手勢識別器並定義您要忽略的區域:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
    CGPoint point = [touch locationInView:self.view]; 

    //Examine point and return NO, if gesture should be ignored. 

    } 
    return YES; 
} 

希望這有助於

+0

非常感謝你,我會稍後再試,並會更新你。 – shlomi

+0

嗨Shlomi,您是否設法啓動並運行? – EsbenB

+0

是的,非常感謝! – shlomi

4

Cipramill的答案是正確的 - 這裏有更多的細節。

IOS文檔建議添加新視圖來描繪您希望頁面轉向手勢處於活動狀態的區域,但此方法要簡單得多。添加代碼在MQ1RootViewController.h和MQ1RootViewController.m設立的Xcode 4的默認模板:

更改接口線MQ1RootViewController.h:

@interface MQ1RootViewController : UIViewController <UIPageViewControllerDelegate,  
    UIGestureRecognizerDelegate> 

將此代碼添加到viewDidLoad中的MQ1RootViewController最底部.M:

for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers) { 
    gR.delegate = self; 
} 

添加這個方法來MQ1RootViewController.m:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
    shouldReceiveTouch:(UITouch *)touch 
{ 

if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] 
    || [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 

    CGPoint point = [touch locationInView:self.view]; 

    if(point.x < 100 || point.x > 924) return YES; 

} 

return NO; 
} 

請注意,「滑動」手勢實際上是由頁面視圖控制器對象的「平移」手勢導出的。

以上限制了手勢到屏幕的左右邊緣。這允許手勢用於與屏幕中心的對象進行交互,而不會意外地通過錯誤刷卡來更改頁面。