Problème touchEnded

HooliVR

Membre confirmé
24 Mars 2020
27
1
27
Bonjour à tous,

J'ai un petit problème avec la fonction touchEnded :

J'aimerais trouver un moyen d'ajouter un petit minuteur de quelques secondes dans ma fonction pour laisser le temps à ma variable de se stabiliser

Je m'explique :

J'essaie de compter le nombre de doigts présents sur l'écran avec une variable "doigts"(Int)
Sauf que lorsque j'enlève plusieurs doigt de l'écran, la fonction prend en compte la première valeur qu'elle récupère (étant donné que je ne peux pas enlever mes doigts en même temps à la milliseconde près) et continue en me décomptant tout les doigt.

J'aimerais rajouter ce petit timer (1 seconde) pour me donner la dernière valeur (doigts restant sur l'écran) après quelle les ait tous décomptés

Merci d'avance pour votre aide
Pierre.
 
Bonjour,
Tu peux utiliser Timer
Swift:
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in //Attente d'une seconde
           // Suite de ton programme
        }
 
  • J’aime
Réactions: HooliVR
Bonjour,
Tu peux utiliser Timer
Swift:
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in //Attente d'une seconde
           // Suite de ton programme
        }

Bonjour @Diablo76

J’ai pu résoudre mon problème en utilisant la fonction Timer :
func timerWaitFingers() {

timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true) } @objc func fireTimer() { print("Wait \(runCount)") runCount += 1 if runCount == 2 { timer?.invalidate() finJeu() runCount = 0 } }

Pour l’instant le code fonctionne très bien, le seul « petit » souci que j’ai c’est que peu importe ce que je rajoute sur ma vue (label…) ça n’est pas affiché dans l’app, comme si ça passait derrière la vue
J’ai l’impression que c’est lié à ce petit morceau de code car quand je le supprime, mon code ne fonctionne plus mais mes labels
apparaissent :

override func loadView() { view = gameView() self.view.backgroundColor = .black } override init(frame: CGRect) { super.init(frame: frame) isMultipleTouchEnabled = true }

Tu aurais une idée ?
 
J’ai pu résoudre mon problème en utilisant la fonction Timer :
func timerWaitFingers() {

timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true) } @objc func fireTimer() { print("Wait \(runCount)") runCount += 1 if runCount == 2 { timer?.invalidate() finJeu() runCount = 0 } }

Tu te compliques la vie ;)

Bloc de code:
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in //Attente d'une seconde
           findJeu()
        }

Difficile de te répondre sans voir le nombre de vue que tu as créé dans ton main.storyboard et comment tu les gères dans ViewController
 
Tu te compliques la vie ;)

Bloc de code:
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (nil) in //Attente d'une seconde
           findJeu()
        }

Difficile de te répondre sans voir le nombre de vue que tu as créé dans ton main.storyboard et comment tu les gères dans ViewController


Merci,

je vais modifier ça de ce pas.

C'est très basique, j'ai une seule vue :
 

Fichiers joints

  • Capture d’écran 2020-04-01 à 16.45.21.png
    Capture d’écran 2020-04-01 à 16.45.21.png
    429,9 KB · Affichages: 216

Ça ne fonctionne pas.. Ça change rien du tout

Mon code commence comme ça :

Bloc de code:
import UIKit

class touchViewController: UIViewController {

     override var prefersStatusBarHidden: Bool {
         return true
     }
  
    override func loadView() {
        view = TouchableView()
    self.view.backgroundColor = .black
    }
    
    class TouchableView : UIView {
        
        // Variables
        var touchViews = [UITouch:TouchSpotView]()
        var joueurs = (Int)()
        var nombreDeJoueurs = (Int)(4)
        var numero = (Int)()
        var timer: Timer?
        var runCount = 0
        var runCount2 = 0
        var runCount3 = 0
        var runCount4 = 3
        var runCount5 = 2
        var gagne = (Bool)()
        var perdu = (Bool)()
        
        
        
        @IBOutlet weak var label: UILabel!
        override init(frame: CGRect) {
            super.init(frame : frame)
            isMultipleTouchEnabled = true
        }
        
        
        
 
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            isMultipleTouchEnabled = true
        }

        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            for touch in touches {
                joueurs += 1
                createViewForTouch(touch: touch)
                print ("\(joueurs) Joueur")
                debutJeu()
                
            }
        }
 
Petite question ?

Du coups j'ai plus accès à l'assistant étant donné que c'est le fichier Swift est plus relié au ViewController ?
 


Tu sais à tout hasard comment je peux faire passer des données (variables) entre mes contrôleurs ?
Le problème c'est que j'ai plus de contrôleur avec la méthode qu'on as utilisés juste avant