Problème touchEnded

HooliVR

Membre junior
24 Mars 2020
26
1
23
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.
 
D

Deleted member 1108206

Invité
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

HooliVR

Membre junior
24 Mars 2020
26
1
23
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 ?
 
D

Deleted member 1108206

Invité
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
 

HooliVR

Membre junior
24 Mars 2020
26
1
23
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

HooliVR

Membre junior
24 Mars 2020
26
1
23
Ç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()
                
            }
        }
 

HooliVR

Membre junior
24 Mars 2020
26
1
23
Petite question ?

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

Deleted member 1108206

Invité
:up: n'hésite pas à revenir, en ce moment du temps, j'en ai à revendre :confused:
 
  • J’aime
Réactions: HooliVR

HooliVR

Membre junior
24 Mars 2020
26
1
23

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