【问题标题】:Adjusting/adding to timer output using Swift 3使用 Swift 3 调整/添加到定时器输出
【发布时间】:2017-04-18 02:04:41
【问题描述】:

我正在使用 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 函数的提示。

【问题讨论】:

    标签: ios swift timer swift3


    【解决方案1】:

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

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

    (你应该遵循使用lowerCamelCase命名函数的快速约定,其中第一个字母小写,函数名中每个单词的开头都是大写,所以addsecond()应该命名为addSecond()而是。

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

    改写addSecond()如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多