2009-08-10 77 views
4

假設我有兩個手指觸摸iPhone的屏幕,但只有一個正在移動。用TouchesMoved跟蹤兩個手指

TouchesMoved只會顯示一個手指(事件)。

我怎麼知道,兩根手指的TouchesMoved所指呢?

回答

1

我發現它可以做我想做的。只需在iTunesU上查看斯坦福大學的CS193P課程即可。

1

不幸的是如果你想想看有沒有「權威」的方式來一個手指有一個觸摸點相關聯。畢竟,你的手指並沒有全球唯一的ID,即iPhone有能力進行抽樣。

你需要做的是保持「前」位置的記錄,這是管理捏和其他東西反正有用的 - 和標記基於接近設定之前接觸每一個手指。

+0

感謝,但我發現有一種方法來跟蹤手指... http://www.alexcurylo.com/blog/2008/11/24/snippet-pinch-and-stretch/ – SpaceDog 2009-08-12 10:15:51

0

您從TouchesBegan方法中獲得NSSet *的觸動位置,您需要遍歷所有觸摸並將它們放到應用程序的上下文中,以便稍後識別它們。

它會一直容易得多,如果你描述你的意圖,以幫助您...

+0

我有一張我想要移動的圖像。該圖像可以通過一個手指(一個人)或兩個手指(兩個人)來移動。 想象一下,人A將他的手指從A1點移動到A2點。如果有人B,則他的手指從B1點移動到B2。 如果只有一個人存在,則圖像被移動到點A1和A2的座標之間的變化。如果兩個人在移動,則圖像移動兩個手指位置變化的總和。所以,我需要跟蹤每個手指移動的程度。 – SpaceDog 2009-08-10 20:29:20

+0

我有一個類似的問題,在我的情況下'touches'集合總是包含單個對象。 – kelin 2017-02-16 19:59:47

0

你寫

TouchesMoved只會顯示一個手指 (事件)。

,但這並非事實:只要兩根手指觸摸屏幕,並且它們中的至少一個動作,你會得到一個touchesMoved手指。

如果一個手指被暫時回升,你可能會得到一些touchesMoved電話只用一個手指,所以你必須決定做什麼有關。

+0

謝謝!我會看看。 – SpaceDog 2009-08-12 10:09:48

1

首先,在你的UIView使多點觸控:

self.multipleTouchEnabled = true 

然後保持一個字典爲UITouch對象。同樣UITouch對象被傳遞touchesBegantouchesMoved,並且touchesEnded

var touchTypes = Dictionary<UITouch, Int>() 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    for touchObject in touches { 
     touchTypes.updateValue(i, forKey: touch as UITouch) //determine i for your own implementation 
    } 
} 

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
    let type = touchTypes[touch] //depending on this value, do something 
} 

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { 
    for touchObject in touches { 
     touchTypes.removeValueForKey(touchObject as UITouch) 
    } 
}