HELP "touchBegan"

HooliVR

Membre junior
24 Mars 2020
26
1
23
Bonsoir,

J'ai un petit souci, j'essaie de détecter plusieurs doigts sur l'écran et ajouter un petit cercle autour d'eux.
Le code fonctionne bien pour un doigt mais lorsque que j'ajoute un doigt supplémentaire, le cercle disparait du premier pour aller sur le second..
J'aimerais que chaque doigt détecté ait son propre cercle,
Quelqu'un aurait une idée ?

Merci d'avance,



Bloc de code:
import UIKit

    class ViewController: UIViewController {

        @IBOutlet weak var ui_monLabel: UILabel!
        
        var nbTouchs = 0
        var touchViews = [UITouch:UIImageView]()

        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.isUserInteractionEnabled = true
            actualiserInterface()
        }
        
        // Actualisation Interface
        // Centralisation de toutes les mises à jour
        // de l'écran dans une seule fonction
        // N'existe pas avec SwiftUI, qui s'en charge automatiquement
        func actualiserInterface() {
            ui_monLabel.text = String(nbTouchs)
        }
        
        //
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            for touch in touches {
                nbTouchs += 1
                createViewForTouch(touch: touch)
            }
            actualiserInterface()
        }
        
        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            for touch in touches {
                nbTouchs -= 1
                removeViewForTouch(touch: touch)
            }
            actualiserInterface()
        }
        
        //
        func createViewForTouch( touch : UITouch ) {
            // Création UIImageView
            let imageView = UIImageView()
            imageView.image = UIImage(systemName: "bolt.circle.fill")
            imageView.frame.size = CGSize(width: 100, height: 100)
            // On place l'imageView à la position du Touch
            imageView.center = touch.location(in: self.view)
            // On pose l'imageView sur la surface de travail
            self.view.addSubview(imageView)
            // Sauvegarde Touch dans le dictionnaire
            touchViews[touch] = imageView
        }
            
        func removeViewForTouch (touch : UITouch ) {
            // Recherche de la vue correspondante au Touch
            if let view = touchViews[touch] {
                // Destruction de la vue
                view.removeFromSuperview()
                // On efface la référence de l'évenement Touch
                // dans le dictionnaire
                touchViews.removeValue(forKey: touch)
            }
        }
        
    }
 

chepiok

Membre confirmé
18 Septembre 2000
310
1
50
www.doyoufeed.com
touchBegan correspond au premier touch (y compris plusieurs doigts simultanés). Donc en touchant avec un doigt PUIS un autre je ne pense pas que ce soit bon. J'étais voir du côté de touchMoved par la suite. Bon c'est un peu léger comme réponse mais j'ai vu ça en passant...