【发布时间】:2017-07-23 00:10:07
【问题描述】:
我正在尝试为我的应用设置倒计时。我的代码的工作原理是每次拖动图像 whiteDot 并包含 smallDot 时都会开始倒计时,并且 smallDot 会在屏幕上的随机位置生成。我有几个问题
1.) 每次执行“if (whiteDot.frame.contains(smallDot.frame) && smallDot.image != nil)”语句后,我都会尝试将计时器重置为 2 秒。
2.) if语句每执行一次,正常倒计时,但在倒计时归零前再次执行时,开始转为负数,计数快于1秒。
import UIKit
var timeClock = 2
class SecondViewController: UIViewController {
func startTimer() {
timeClock -= 1
time.text = "Time: " + String(timeClock)
if whiteDot.frame.contains(smallDot.frame) && timeClock > 0 {
timeClock = 2
}
else if timeClock == 0 || timeClock < 0 {
timer.invalidate()
}
}
var timer = Timer()
@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
if (whiteDot.frame.contains(smallDot.frame) && smallDot.image != nil) {
addOne += 1
score.text = "\(addOne)"
smallDot.center = spawnRandomPosition()
timeClock = 2
if timeClock == 0 || timeClock < 0 {
timer.invalidate()
}
else if timeClock > 0 && (whiteDot.frame.contains(smallDot.frame)){
timeClock = 2
}
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(SecondViewController.action), userInfo: nil, repeats: true)
}
}
【问题讨论】:
-
我可能不会立即初始化计时器(var timer:Timer!)。如果我理解正确,计时器代码会在所需时间发生后通过回调被抛出另一个线程。因此,我在这里看不到的一件事是使您的计时器无效,这很重要。如果您需要让计时器以不同的持续时间触发,我可能会创建一个以 timerInterval 作为参数的函数并执行以下步骤:1)使先前的计时器无效 2)生成具有传递持续时间的新计时器。
-
请多解释一下代码的意图?照原样,我想知道几件事。
-
具体来说,您的代码将看到大约每秒调用一次的操作例程。 1.你描述的问题是要约束timeClock为正数吗? 2. 我没有看到你在任何地方重置了 timeClock 的值,所以它会无限期地倒计时。这不是你现在的样子吗?您可以做以下几件事之一:1. 您可以在 timeClock 变为零时终止计时器 2. 您可以在 timeClock 变为负数时将其重置为某个正值更多信息?
-
我刚刚更新了我的代码并添加了更多细节
标签: ios swift timer counter countdown