Je développe un jeu et je veux créer un menu de pause. Voici mon code:
self.view?.paused = true
mais NSTimer.scheduledTimerWithTimeInterval fonctionne toujours ..
for var i=0; i < rocketCount; i++ {
var a:NSTimeInterval = 1
ii += a
delaysShow = 2.0 + ((stimulus + interStimulus) * ii)
var time3 = NSTimer.scheduledTimerWithTimeInterval(delaysShow!, target: self, selector: Selector("showRocket:"), userInfo: rocketid[i] , repeats: false)
}
Je veux que time3 mette en pause le chronomètre lorsque le joueur clique sur le menu Pause et continue à le lancer lorsque le joueur revient au jeu, mais comment puis-je mettre en pause NSTimer.scheduledTimerWithTimeInterval? aidez-moi s'il vous plaît.
Vous devez l'invalider et le recréer. Vous pouvez ensuite utiliser une isPaused
bool pour garder la trace de l'état si vous avez le même bouton pour mettre en pause et reprendre le chronomètre:
var isPaused = true
var timer = NSTimer()
@IBAction func pauseResume(sender: AnyObject) {
if isPaused{
timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("somAction"), userInfo: nil, repeats: true)
isPaused = false
} else {
timer.invalidate()
isPaused = true
}
}
Pour l'arrêter
time3.invalidate()
Pour recommencer
time3.fire()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.action), userInfo: nil, repeats: true)
timer.invalidate()
time += 1
label.text = String(time)
'label' est la minuterie en sortie.
Commencer:
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateView"), userInfo: nil, repeats: true)
Pour reprendre:
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateView"), userInfo: nil, repeats: true)
Arrêter, mettre en pause:
timer.invalidate
Cela a fonctionné pour moi. Le truc est que ne cherchez pas quelque chose comme "timer.resume"
ou "timer.validate"
. Utilisez simplement "le même code pour démarrer une minuterie" pour le reprendre après la pause.
Vous ne pouvez pas reprendre le chronomètre en arrière .. Au lieu de le reprendre, créez simplement un nouveau chronomètre.
class SomeClass : NSObject { // class must be NSObject, if there is no "NSObject" you'll get the error at runtime
var timer = NSTimer()
init() {
super.init()
startOrResumeTimer()
}
func timerAction() {
NSLog("timer action")
}
func pauseTimer() {
timer.invalidate
}
func startOrResumeTimer() {
timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("timerAction"), userInfo: nil, repeats: true)
}
}
Swift3
Déclaration globale
var swiftTimer = Timer()
var count = 30
var timer = Timer()
@IBOutlet weak var CountDownTimer: UILabel!
viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
BtnStart.tag = 0
}
IBACTION déclenchée
@IBAction func BtnStartTapped(_ sender: Any) {
if BtnStart.tag == 0 {
BtnStart.setTitle("STOP", for: .normal)
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(ScoreBoardVC.update), userInfo: nil, repeats: true)
BtnStart.tag = 1
}
else
{
BtnStart.setTitle("START", for: .normal)
timer.invalidate()
BtnStart.tag = 0
}
}
Fonction qui manipule les choses
func update(){
if(count > 0){
let minutes = String(count / 60)
let ConvMin = Float(minutes)
let minuttes1 = String(format: "%.0f", ConvMin!)
print(minutes)
let seconds = String(count % 60)
let ConvSec = Float(seconds)
let seconds1 = String(format: "%.0f", ConvSec!)
CountDownTimer.text = (minuttes1 + ":" + seconds1)
count += 1
}
}
Pause minuterie: timer.invalidate ()
et
Reprendre le minuteur: recréez le minuteur. ça marche bien.
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(mainController.updateTimer), userInfo: nil, repeats: true)