我正在尝试创建一个带有主比赛时钟和开始/停止按钮的曲棍球比赛时钟应用程序。但我的 stopGameclock 函数遇到了问题。计时器不会失效。通过在这里搜索其他问题,我认为这与我有关:
var gameclockTimer = NSTimer()
接缝我不能使用这个变量来使计时器无效。
我知道该功能有效,因为我可以看到“停止”
func stopGameclock() {
self.gameclockTimer.invalidate()
print("stop")
有什么办法可以让这个函数使我的计时器失效吗?
不幸的是,到目前为止我找到的答案对我没有帮助,因为我不需要将计时器和函数放在 ViewController 类中。
我想将计时器保留在单独的类中的原因是因为稍后我将添加几个惩罚时钟/计时器,并且我希望将它们放在单独的类中以方便概览。
到目前为止,完整的代码如下所示:
// ViewController.swift
import UIKit
class ViewController: UIViewController {
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewDidLoad() {
super.viewDidLoad()
gameclockLabel.text = "00:00"
}
var startstopPushed: Bool = false
@IBOutlet weak var gameclockLabel: UILabel!
@IBOutlet weak var startstop: UIButton!
@IBAction func startStopbutton(sender: AnyObject) {
if startstopPushed == false {
Gameclock().startGameclock()
startstop.setImage(UIImage(named: "stop.png"), forState: UIControlState.Normal)
startstopPushed = true
}
else
{
Gameclock().stopGameclock()
startstop.setImage(UIImage(named: "start.png"), forState: UIControlState.Normal)
startstopPushed = false
}
}
}
class Gameclock : NSObject {
var gameclockTimer = NSTimer()
var timeString: String = ""
var seconds = 0
var minutes = 0
func startGameclock() {
gameclockTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateGameclock"), userInfo: nil, repeats: true)
}
func stopGameclock() {
self.gameclockTimer.invalidate()
print("stop")
}
func updateGameclock() {
seconds += 1
if seconds == 60 {
minutes += 1
seconds = 0
}
let secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)"
let minutesString = minutes > 9 ? "\(minutes)" : "0\(minutes)"
timeString = "\(minutesString):\(secondsString)"
print(timeString)
}
}
问题是,每次访问 GameClock 时,您都会创建它的一个新实例 - 因此您要停止的实例不是您创建的实例。
您可以将所有功能保留在GameClock
类,但您需要在中定义一个变量ViewController
来访问它。
class ViewController: UIViewController {
var gameClock = Gameclock()
然后在你的startstopPushed
方法进行这些更改
if startstopPushed == false {
//Gameclock().startGameclock()
gameClock.startGameclock()
startstop.setImage(UIImage(named: "stop.png"), forState: UIControlState.Normal)
startstopPushed = true
}
else
{
//Gameclock().stopGameclock()
gameClock.stopGameclock()
startstop.setImage(UIImage(named: "start.png"), forState: UIControlState.Normal)
startstopPushed = false
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)