#selector定时器范围问题

时间:2017-09-24 11:08:16

标签: swift timer scope

我坚持让它进入正确的范围。我确信它的东西非常简单,但是我正用它碰撞墙壁。我发现的任何答案都在swift的早期版本中,所以我很难理解如何解决这个问题

我目前的问题是尝试正确初始化计时器并计数。 “选择器”导致了大多数问题。其余的我肯定不能事后弄清楚

代码如下。

    @IBOutlet weak var shortTimerLabel: UILabel!
@IBOutlet weak var longTimerLabel: UILabel!

var seconds = 60 //This variable will hold a starting value of seconds. It could be any amount above 0.
var timer = Timer()
var isTimerRunning = false //This will be used to make sure only one timer is created at a time.

@IBAction func longpressed(_ gestureRecognizer: UILongPressGestureRecognizer) {
  shortTimerLabel.text = "longPressed"

}
@IBAction func tappedShortTimer(_ gestureRecognizer: UITapGestureRecognizer) {
  shortTimerLabel.text = "ShortPressed"
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    func runTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self,   selector: #selector(updateTimer), userInfo: nil, repeats: true)
    }
    func updateTimer() {
        seconds += 1     //This will decrement(count down)the seconds.
        shortTimerLabel.text = "\(seconds)" //This will update the label.
    }
}

我试图创建一个可以使用手势控制的秒表。短按标签表示停止/启动,长按表示重置时间。

2 个答案:

答案 0 :(得分:1)

updateTimer()方法中,第一行应改为seconds -= 1(如果您想倒计时)。

此外,您可能希望更新updateTimer()方法,如下所示:

  func updateTimer() {

      seconds -= 1

      if seconds == 0 {
        timer.invalidate()
        isTimerRunning = false
      }

      shortTimerLabel.text = String(describing: seconds)
  }

此处的另一个问题是您将runTimer()updateTimer()方法添加到了错误的位置。您不应该在<{1}}方法中添加

您的最终代码如下所示:

viewDidLoad

答案 1 :(得分:1)

  • 选择器应以#selector(ViewController.updateTimer)
  • 的形式提供
  • 您不应在viewDidLoad但在
  • 之外声明功能
  • 您只能在longpressed功能
  • 中设置计时器
  • 要停止,请timer.invalidate()