How can I make a countdown timer like in a music player?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-12 03:39:24

问题


I have a label and its value is "03:48".

I want to countdown it like a music player. How can I do that?

03:48 03:47 03:46 03:45 ... 00:00

var musictime =3:48

func stringFromTimeInterval(interval: NSTimeInterval) -> String {
    let interval = Int(interval)
    let seconds = interval % 60
    let minutes = (interval / 60)      
    return String(format: "%02d:%02d", minutes, seconds)
}

func startTimer() {
    var duration=musictime.componentsSeparatedByString(":")   //split 3  and 48

    var count = duration[0].toInt()! * 60 + duration[1].toInt()! //224 second

    timerCounter = NSTimeInterval( count )
    NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
}

@objc func onTimer(timer:NSTimer!) {
    // Here is the string containing the timer
    // Update your label here
    //println(stringFromTimeInterval(timerCounter))
    statusLabel.text=stringFromTimeInterval(timerCounter)

    timerCounter!--
}

回答1:


You should take a look at NSDate property timeIntervalSinceNow. All you need is to set a future date as the endDate using NSDate method dateByAddingTimeInterval as follow:

class ViewController: UIViewController {

    @IBOutlet weak var timerLabel: UILabel!

    var remainingTime: NSTimeInterval = 0
    var endDate: NSDate!
    var timer = NSTimer()

    override func viewDidLoad() {
        super.viewDidLoad()
        remainingTime = 228.0   // choose as many seconds as you want (total time)
        endDate = NSDate().dateByAddingTimeInterval(remainingTime)   // set your future end date by adding the time for your timer

        timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "updateLabel", userInfo: nil, repeats: true)  // create a timer to update your label
    }
    func updateLabel() {
        timerLabel.text = endDate.timeIntervalSinceNow.mmss
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

// you will need this extension to convert your time interval to a time string

extension NSTimeInterval {
    var mmss: String {
        return self < 0 ? "00:00" : String(format:"%02d:%02d", Int((self/60.0)%60), Int(self % 60))
    }
    var hmmss: String {
        return String(format:"%d:%02d:%02d", Int(self/3600.0), Int(self / 60.0 % 60), Int(self % 60))
    }
}



回答2:


Well, by writing code. This is not a "Teach me how to program site. It's a site where you post questions about specific problems you are having with code you have written.

In short, though do the following:

Record your end time

let endInterval = NSDate.timeIntervalSinceReferenceDate() + secondsToEnd

Create a repeating timer that fires once/second.

Each time it fires, compute the number of seconds remaining to endInterval. Calculate minutes remaining as

Int((endInterval-nowInterval)/60)

Calculate seconds remaining as

Int(endInterval-nowInterval)%60

There is also the new (to iOS 8) class NSDateComponentsFormatter, which I've read a little about but haven't used. I believe that will generate formatted timer intervals like hh:mm:ss for you automatically. You'd use the same approach I outlined above, but instead of calculating minutes and seconds yourself, use the NSDateComponentsFormatter.



来源:https://stackoverflow.com/questions/32816141/convert-seconds-into-hours-in-ios-swift

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!