2011-11-22 50 views
3

我是新來這個網站和iOS編程。如何確定多點觸控場景中最後一次觸摸的x&y?

我正在打擊應用程序。爲此,我想知道觸摸屏幕的每個手指的x和y位置。我認爲這很簡單,但多點觸控讓我感到困惑。

假設用戶在屏幕上按下兩個手指,並且用戶按下屏幕上的第三根手指。我如何確定這個第三根手指的位置?

我的感覺是,我需要實現的touchesBegan

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

要確定X和Y位置我要看看觸發此調用的touchesBegan觸摸。但觸摸是以無序的方式呈現的。如果第三根手指觸發了這個觸碰開關,那麼我在NSSet中有三個觸摸。但是由於該集合是無序的,我如何確定觸發第三次觸摸touchesBegan的觸摸?如果我正確理解我的文檔,可能是以上三種情況中的任何一種。

提前

回答

0

非常感謝也許你可以添加一個簡單的計數器財產,並提高其在的touchesBegan和touchesEnd值下降。

+0

謝謝您的回覆。我不確定我是否跟隨你。在每次觸碰電話開始時,我可以通過查看 [觸點計數] 來確定設備上當前的手指數量。我的問題是;假設計數表明設備上有三個手指,並且NSSet因此包含三個UITouch對象,那麼如何確定哪些UITouch對象代表觸摸屏幕的最新手指?我想使用locationInView檢查該UITouch對象的位置。 –

+1

對不起,我誤解了你的目標。 UITouch有一個名爲timestamp的屬性。通過檢查這個屬性的NSSet迭代應該給你你正在尋找的觸摸。 – Coli88

0

好吧,現在我發現我錯誤地解釋了我的測試數據。如果在第三根手指觸摸設備時兩個手指已經接觸到設備,則在調用touchesBegan時只有一個UITouch對象是NSSet的一部分,而不是我看起來經歷的三個。這一個UITouch代表了最後的指尖。

將多個UITouch對象傳遞給touchesBegan的唯一時間是事實上多個手指同時觸摸設備。

因爲在我的情況下,我需要根據位置處理所有新的觸摸,所以我需要處理NSSet中的所有UITouch對象。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UITouch *touch in touches) 
    { 
     CGPoint location = [touch locationInView:self.view]; 
     // Handle finger touch at given location 
     // ... 
    } 
}