Alors j'ai été en train de jouer en essayant d'obtenir les coordonnées des touches à l'écran. Jusqu'à présent, je peux obtenir les coordonnées d'une touche avec ceci: mais lorsque vous touchez deux doigts, je reçois uniquement les coordonnées de la première touche. Works multi-touchs (j'ai testé avec ce petit tutoriel: http://www.techotopia.com /index.php/an_example_swift_ios_8_touch,_multitouch_and_tap_application ). Donc, ma question est de savoir comment puis-je obtenir les coordonnées du deuxième (et troisième, quatrième ...) toucher? p> p>
6 Réponses :
Vous devez parcourir les différentes touches. De cette façon, vous pouvez accéder à chaque touche.
for touch in touches{ //Handle touch let touchLocation = touch.locationInView(self.view) }
L'argument code> indiqué est un ensemble de touches détectées.
Vous ne voyez qu'une seule touche, car vous sélectionnez l'une des touches avec: afin d'obtenir toutes les touches itérer l'ensemble donné P> for obj in touches.allObjects {
let touch = obj as UITouch
let location = touch.locationInView(self.view)
println(location)
}
** Mis à jour sur Swift 4 et Xcode 9 (8 oct. 2017) **
Tout d'abord, N'oubliez pas d'activer les événements multi-touchs forts> en réglant P> override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self.view)
print(location)
}
}
Merci pour votre réponse! J'ai marqué la réponse de Giorashc aussi utile car il a donné un peu plus d'informations, mais les deux méthodes fonctionnent :)
De rien! C'est votre appel, bien sûr :) J'ai édité la réponse un peu et laissé des références à la documentation, soulignant comment il est important d'activer la multi-touch ou que le code ne fonctionnera pas (nous oublions toujours cela!). Je quitte cette réponse comme référence pour d'autres personnes qui pourraient avoir besoin de ce détail :)
dans SWIFT 1.2 Ceci a changé et touchesbegan code> fournit désormais un ensemble de nsObjects.
Itérer à travers eux, jetez la collection Touchs en tant qu'ensemble d'objets UITOUCH comme suit:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
var touchSet = touches as! Set<UITouch>
for touch in touchSet{
let location = touch.locationInView(self.view)
println(location)
}
}
Devrais-je marquer cette réponse comme réponse à la question? (Depuis que la réponse maintenant marquée n'est plus une réponse)
Pour Swift 3, basé sur la réponse de @ Andrew: éditer, mon mauvais, qui ne répond pas à votre question, n'avait pas le même problème et que quelqu'un m'a lié à Quoi qu'il en soit, je devais changer de peu de choses à Fonctionnez-vous dans SWIFT 3, voici mon code actuel: P> var fingers = [String?](repeating: nil, count:5)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
for touch in touches{
let point = touch.location(in: self.view)
for (index,finger) in fingers.enumerated() {
if finger == nil {
fingers[index] = String(format: "%p", touch)
print("finger \(index+1): x=\(point.x) , y=\(point.y)")
break
}
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)
for touch in touches {
let point = touch.location(in: self.view)
for (index,finger) in fingers.enumerated() {
if let finger = finger, finger == String(format: "%p", touch) {
print("finger \(index+1): x=\(point.x) , y=\(point.y)")
break
}
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
for touch in touches {
for (index,finger) in fingers.enumerated() {
if let finger = finger, finger == String(format: "%p", touch) {
fingers[index] = nil
break
}
}
}
}
Si quelqu'un peut confirmer que cela fonctionne, je vais marquer cela comme réponse