2009-08-10 4 views
4

Angenommen, ich habe zwei Finger, die den iPhone-Bildschirm berühren, aber nur einer bewegt sich.Zwei Finger mit TouchesMoved verfolgen

TouchesMoved zeigt nur einen Finger (Ereignis).

Woher weiß ich, auf welchen der beiden Finger TouchesMoved sich bezieht?

Antwort

1

Ich entdeckte, dass es möglich ist, zu tun, was ich will. Überprüfen Sie Stanfords CS193P-Kurs auf iTunesU.

1

Leider, wenn Sie darüber nachdenken, gibt es keine "definitive" Möglichkeit, einen Finger mit einem Berührungspunkt zu verbinden. Es ist schließlich nicht, dass Ihre Finger global eindeutige IDs haben, die das iPhone die Fähigkeit hat, zu probieren.

Was Sie tun müssen, ist eine Aufzeichnung der "vorherigen" Positionen, was nützlich ist, um Kneifen und andere Dinge trotzdem zu verwalten - und jeden Finger basierend auf der Nähe zu den vorherigen Berührungen zu markieren.

+0

Dank, aber ich entdeckte, ist auch ein Weg Finger zu verfolgen ... http://www.alexcurylo.com/blog/2008/11/24/snippet-pinch-and-stretch/ – SpaceDog

0

Sie erhalten die Berührungen als NSSet * von der TouchesBegan Methode, müssen Sie alle Berührungen durchlaufen und sie in den Kontext Ihrer App setzen, damit Sie sie später identifizieren können.

Es wäre schon viel einfacher gewesen, Ihnen zu helfen, wenn Sie Ihre Absicht beschrieben ...

+0

Ich habe ein Bild, das ich bewegen möchte. Dieses Bild kann mit einem Finger (eine Person) oder zwei Fingern (zwei Personen) bewegt werden. Stellen Sie sich vor, dass Person A seinen Finger von Punkt A1 nach A2 bewegt. Wenn es eine Person B gibt, bewegt sie ihren Finger von Punkt B1 nach B2. Wenn nur eine Person vorhanden ist, wird das Bild um die Abweichung zwischen den Koordinaten der Punkte A1 und A2 verschoben. Wenn sich zwei Personen bewegen, bewegt das Bild die SUMME der Variationen der Positionen der beiden Finger. Also, ich muss verfolgen, wie viel jeder Finger bewegte. – SpaceDog

+0

Ich habe ein ähnliches Problem und die 'touch's setzen immer ein einzelnes Objekt in meinem Fall. – kelin

0

Sie schrieb

TouchesMoved zeigt nur einen Finger (Ereignis).

aber das ist nicht wirklich wahr: so lange wie zwei Finger auf den Bildschirm berühren, und zumindest einer von ihnen zieht, erhalten Sie ein touchesMoved mit beiden Finger.

Wenn ein Finger vorübergehend abgeholt wird, können Sie einige touchesMoved Anrufe mit nur einem Finger erhalten, also müssen Sie entscheiden, was Sie dagegen tun sollen.

+0

danke! Ich werde es mir ansehen. – SpaceDog

1

Aktivieren Sie zuerst Multi-Touch auf Ihrer UIView:

self.multipleTouchEnabled = true 

Dann halten Sie ein Wörterbuch für die UITouch Objekte. Die gleichen UITouch Objekte wird in touchesBegan weitergegeben, touchesMoved und 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) 
    } 
}