ios - 使用 Swift 3 调整/添加定时器输出

标签 ios swift timer swift3

我正在使用 Swift 3 在 Xcode 中制作我的第一个应用程序,我在制作计时器方面遇到了一些挑战。到目前为止,我有一个可以倒计时并可以重置为预定义时间的应用程序。我的下一步是让用户使用单次向上滑动来调整开始时间以向计时器添加秒数,向下滑动以从计时器中删除秒数。

到目前为止我的代码:

import UIKit

class StopWatchViewController: UIViewController {

    @IBOutlet weak var timerLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.timerLabel.text = timeString(time: TimeInterval(seconds))
    }

    var seconds = 180 //This is start time in seconds 180 = 3mins
    var timer = Timer()
    var isTimerRunning = false

    func updateTimer() {
        if seconds < 2 {
            timer.invalidate()
            self.timerLabel.text = "Stop!"
        } else {
            seconds -= 1
            timerLabel.text = timeString(time: TimeInterval(seconds))
        }
    }

    func runTimer() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(StopWatchViewController.updateTimer)), userInfo: nil, repeats: true)
        isTimerRunning = true
    }

    func singleTapped(_ sender: UITapGestureRecognizer) {
        //Start Timer
        if isTimerRunning == false {
            runTimer()
        }
    }


    func timeString(time:TimeInterval) -> String {
        let minutes = Int(time) / 60 % 60
        let seconds = Int(time) % 60
        return String(format:"%02i:%02i", minutes, seconds)
    }

    func longPress(_ sender: UILongPressGestureRecognizer) {
       //Pause
    if isTimerRunning == true {
            timer.invalidate()
            isTimerRunning = false
        }
    }

    func doubleTapped(_ sender: UITapGestureRecognizer) {
        //Double Tap Reset
        timer.invalidate()
        seconds = 180
        timerLabel.text = timeString(time: TimeInterval(seconds))
        isTimerRunning = false
    }

    func addsecond() {
        if isTimerRunning == false {
        //timer plus second
            timerLabel.text = timeString(time: TimeInterval(seconds)+1)
        }
    }

    func singleSwipeUp(_ sender: UISwipeGestureRecognizer) {   
        //Add seconds using swipe up
        timer.invalidate()
        addsecond()

    }
}

这可以用作具有预定义时间(3 分钟)的计时器,但不允许用户使用上下滑动来调整时间。目前它只会在显示中增加一秒,但这不会影响未激活的计时器,一旦它重新启动。我主要是在寻找函数 addsecond 的提示。

最佳答案

您有一个变量 seconds,您可以使用它来跟踪计时器何时完成,并显示到您的 timerLabel 中。

您的 singleSwipeUp(_:) 调用 addSecond(),这会更改 timerLabelText,但不会更改 seconds 实际控制计时器的变量。

(您应该遵循使用 lowerCamelCase 命名函数的 swift 约定,其中第一个字母为小写,函数名称中每个后续单词的开头均为大写,因此 addsecond() 应该改名为 addSecond()

类名和类型应该以 UpperCamelCase 命名,其中名称中的所有单词都大写,包括第一个字母。)

重写addSecond()如下:

func addsecond() {
    if isTimerRunning == false {
        //Increment seconds, then install the new value in timerLabel
        seconds += 1
        timerLabel.text = timeString(time: TimeInterval(seconds))
    }
}

关于ios - 使用 Swift 3 调整/添加定时器输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43462398/

相关文章:

ios - 无法转换 UINavigationController 类型的值

ios - RestKit 使用外键从 JSON 导入

ios - 为什么 xcode 要求横向启动图像?

ios - 关于方向更改的自定义 UITableViewCell 自动布局问题

ios - 如何在 Swift 中跳过 for 循环中的索引

ios - EXC_BAD_ACCESS KERN_INVALID_ADDRESS iOS 11.2 Swift 4.0

无法使用 TMR4、T4CON 等访问定时器 4 pic32

iphone - 多个 NSUrlConnection 同时运行

java - 停止和启动计时器

c - 一个简单的 C 波表振荡器