2011-09-11 151 views
4

這可能是某處張貼在這裏,但我不能找到它。我正在用兩個UIViews編寫一個簡單的iOS應用程序。用戶將首先按住屏幕的某個區域,然後釋放他們的觸摸,然後快速觸摸下面的第二個視圖。的iOS檢測用戶觸摸釋放

第一的UIView連有一個UILongPressGestureRecognizer和工作正常。第二個UIView有一個連接到它的UITapGestureRecognizer,並且工作正常。然而,我不能讓這些手勢識別器中的任何一個返回說明用戶釋放觸摸的任何內容。

我曾嘗試這個代碼無濟於事:

- (void)holdAction:(UILongPressGestureRecognizer *)holdRecognizer 
{ 
    if (UIGestureRecognizerStateRecognized) { 
     holdLabel.text = @"Holding Correctly. Release Touch when ready."; 
     holdView.backgroundColor = [UIColor greenColor]; 
    } else if (UIGestureRecognizerStateCancelled){ 
     holdLabel.text = @"Ended"; 
     holdView.backgroundColor = [UIColor redColor]; 
} 

任何建議將是巨大的,尤其是如果有人知道如何實現返回觸摸設備的用戶的狀態的呼叫。我查看了開發人員文檔,並且已經空了。

+0

您可以用按鈕來代替看法? UIButton有一個TouchUpInside事件。 –

回答

9

擺弄了幾個小時後,我發現,工作的方式,不知道如果它是最好的辦法。原來我需要像下面的代碼那樣寫它。我沒有調用我在viewDidLoad()方法中聲明的特定UIGestureRecognizer。

- (void)holdAction:(UILongPressGestureRecognizer *)holdRecognizer 
{ 
    if (holdRecognizer.state == UIGestureRecognizerStateBegan) { 
     holdLabel.text = @"Holding Correctly. Release when ready."; 
     holdView.backgroundColor = [UIColor greenColor]; 
    } else if (holdRecognizer.state == UIGestureRecognizerStateEnded) 
    { 
     holdLabel.text = @"You let go!"; 
     holdView.backgroundColor = [UIColor redColor]; 
    } 
} 
+0

偉大的解決方案。我加了'[holdGesture setMinimumPressDuration:0.01];'因爲它更加敏感。 – Segev

2

您需要使用手動觸摸操作在這裏(而不是使用手勢識別)。任何UIResponder子類都可以實現以下四種方法:

– touchesBegan:withEvent: 
– touchesMoved:withEvent: 
– touchesEnded:withEvent: 
– touchesCancelled:withEvent: 

通過使用這些方法,您可以訪問觸摸事件的每個階段。您可能必須實施自己的邏輯來檢測長按,但您可以完全訪問所有觸摸。

有關觸摸操作的更多信息,從2011年WWDC本次會議是金(需要開發帳號):

https://developer.apple.com/itunes/?destination=adc.apple.com.8270634034.08270634040.8367260921?i=1527940296

+0

+1爲通用方法。 – Jacksonkr