HELP "touchBegan"

HooliVR

Membre confirmé
24 Mars 2020
27
1
28
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)
            }
        }
        
    }
 
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...
 

Sujets similaires