2本の指がiPhoneの画面に触れているが、1本だけが動いているとします。
TouchesMovedは1本の指(イベント)を表示します。
TouchesMovedが2本の指のどちらを参照しているのかを知るにはどうすればよいですか?
2本の指がiPhoneの画面に触れているが、1本だけが動いているとします。
TouchesMovedは1本の指(イベント)を表示します。
TouchesMovedが2本の指のどちらを参照しているのかを知るにはどうすればよいですか?
残念ながら、それについて考えると、1本の指を1つのタッチポイントに関連付ける「決定的な」方法はありません。結局のところ、iPhoneがサンプリングできるのは、指がグローバルに一意のIDを持っているということではありません。
あなたがする必要があるのは、とにかくピンチや他のものを管理するのに役立つ「前の」場所の記録を保持することです-そして前のタッチセットへの近さに基づいて各指にタグを付けます。
自分のやりたいことができることを発見しました。iTunesU で Stanford の CS193P コースを確認してください。
まず、でマルチタッチを有効にしますUIView
。
self.multipleTouchEnabled = true
次に、オブジェクトの辞書を保持しUITouch
ます。同じUITouch
オブジェクトがtouchesBegan
、touchesMoved
、およびに渡され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)
}
}
NSSet *
メソッドからタッチを取得しTouchesBegan
ます。後で識別できるように、すべてのタッチをループしてアプリのコンテキストに入れる必要があります。
あなたの意図を説明してくれれば、あなたを助けるのがはるかに簡単だったでしょう...
あなたが書いた
TouchesMoved は 1 本の指 (イベント) のみを表示します。
しかし、これは実際には正しくありません。2 本の指が画面に触れていて、そのうちの少なくとも 1 本が動いている限り、両方の指touchesMoved
でが得られます。
一時的に指がtouchesMoved
1 本しかない場合は、指 1 本だけで電話がかかってくる可能性があるため、それについてどうするかを決める必要があります。