2011-07-05 50 views
16

當用戶單抽頭我認爲,我需要運行一個特定的方法。 當用戶雙擊時,我需要另一種方法。濾波單,雙抽頭

的問題是,雙擊觸發單輕叩,它在我的邏輯引入錯誤。 因爲我需要跟蹤點我不能使用UIGestureRecognizer。

我嘗試一些布爾值,但沒有機會。我也試過取消/ perfomSelector延遲技術,但它不工作(這很奇怪,因爲其他論壇上的其他人說它的工作原理,也許模擬器觸摸檢測是不同的?)

我想讓用戶設置棋子的位置(拖動,旋轉),但我需要知道棋子的交叉點,剪輯到棋盤區等,這就是爲什麼一個簡單的布爾值不能解決問題的原因。

在此先感謝!

+0

應該張貼您的取消/ perfomSelector延遲代碼,工作正常。 – mackworth

回答

44

檢查this,似乎是正確的,你在找什麼:

下面的代碼使用UITapGestureRecognizer處理一個水龍頭和雙擊。該代碼被設計爲,如果我們有雙擊事件,它將不會觸發單擊事件。訣竅是使用requireGestureRecognizerToFail來請求單擊手勢等待雙擊事件失敗之前觸發。所以當用戶點擊屏幕時,單擊手勢識別器將不會觸發該事件,直到雙擊手勢識別器。如果雙擊手勢識別器識別該事件,則它將觸發雙標籤事件並跳過單擊事件,否則將觸發單擊事件。

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] 
          initWithTarget:self action:@selector(handleDoubleTap:)]; 
    doubleTapGestureRecognizer.numberOfTapsRequired = 2; 

    //tapGestureRecognizer.delegate = self; 
    [self addGestureRecognizer:doubleTapGestureRecognizer]; 

    // 
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleTapGestureRecognizer.numberOfTapsRequired = 1; 

    [singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer]; 
    //tapGestureRecognizer.delegate = self; 
    [self addGestureRecognizer:singleTapGestureRecognizer]; 

也許我完全不明白你的「我需要跟蹤點」的意思,但我沒有看到與手勢識別這樣做的任何問題。

+0

非常感謝你,這有效,但我發現另一個問題...我有一個CGPoint實例變量,跟蹤拖動開始點(在touchesBegan中設置)。如果用戶拖動片到一個不正確的地點(如在另一塊的頂部)中,i設定件位置到該開始點,在touchesEnded。但是,如果用戶旋轉了一塊,並設置了不正確的位置,我的起點將被觸點所取代,我將無法將該塊重置爲起點......我很困惑實現這個簡單的旋轉/下降片定位! – Fernando

+0

這很棒 –

1

夫特解決方案:

doubleTapSmall1.numberOfTapsRequired = 2 
    doubleTapSmall1.addTarget(self, action: "doubleTapPic1") 
    smallProfilePic1.addGestureRecognizer(doubleTapSmall1) 

    singleTapSmall1.numberOfTapsRequired = 1 
    singleTapSmall1.addTarget(self, action: "singleTapPic1") 
    singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1) 
    smallProfilePic1.addGestureRecognizer(singleTapSmall1) 
1

夫特3解決方案:

doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:))) 
doubleTap.numberOfTapsRequired = 2 


singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:))) 
singleTap.numberOfTapsRequired = 1 

singleTap.require(toFail: doubleTap) 

self.view.addGestureRecognizer(doubletap) 
self.view.addGestureRecognizer(singleTap) 

在代碼線singleTap.require(toFail:doubleTap)我們迫使單抽頭等待並確保輕拍即使不是雙擊。這意味着我們要求確保雙擊事件失敗,因此它被認爲是單擊。

0

通過適當地設定代表就落實UIGestureRecognizer委託方法。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 
      return YES; 
     } 

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
     return YES; 
    } 

同時添加這行代碼

[singleTap requireGestureRecognizerToFail:doubleTap];