2017-10-09 29 views
0

好傢伙,我需要一些幫助。採用了滑蓋在Xcode中創建一個倒計時觀看

我試着去創造一個倒計時錶,可以計算從小時,分鐘再予和秒後放下。現在我只是在能夠創造秒倒計時,但我希望應用程序能夠更新秒,分鐘和小時,當我「幻燈片」與滑塊。我發現很難正確更新標籤並在應用程序中添加「小時和分鐘」。有人可以幫助我找出邏輯。

這是到目前爲止,我寫的代碼,它工作正常只能用秒..我還添加了音頻文件,該文件會打到底,你可以在代碼中看到。

class ViewController: UIViewController { 

var secondsCount = 30; 
var timer = Timer() 
var audioPlayer = AVAudioPlayer() 

@IBOutlet weak var label: UILabel! 
@IBOutlet weak var labelmin: UILabel! 


    // Slideren som slider tid for sal 1 
@IBOutlet weak var sliderOutlet: UISlider! 
@IBAction func slider(_ sender: UISlider) 
{ 
    //Live changes the numbers 
    secondsCount = Int(sender.value) 
    label.text = String(secondsCount) + " Seconds" 

} 


    //Start button 
@IBOutlet weak var startOutlet: UIButton! 
@IBAction func start(_ sender: Any) 
{ 
     //Nederstående kode aktiverer funktionen counter() 
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.counter), userInfo: nil, repeats: true) 

    sliderOutlet.isHidden = true 
    startOutlet.isHidden = true 
} 

    //Counter function 
func counter() { 
    secondsCount -= 1 

    label.text = String(secondsCount) + " Seconds" 

    if (secondsCount == 0) 
    { 
     timer.invalidate() 

     audioPlayer.play() 
    } 
} 

    //Stop button 
@IBOutlet weak var stopOutlet: UIButton! 
@IBAction func stop(_ sender: Any) 
{ 
    timer.invalidate() 
    secondsCount = 30 
    sliderOutlet.setValue(30, animated: true) 
    label.text = "30 Seconds" 

    audioPlayer.stop() 

    sliderOutlet.isHidden = false 
    startOutlet.isHidden = false 
} 


    // viewDidLoad 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    do 
    { 
     let audioPath = Bundle.main.path(forResource: "1", ofType: ".mp3") 

     try audioPlayer = AVAudioPlayer(contentsOf: URL(fileURLWithPath: audioPath!)) 

    } 
    catch 
    { 
     //ERROR 
    } 



} 
+1

您滑塊的最小值和最大值是什麼?起始價值是多少?而且,當滑塊值改變時你想要發生什麼? – DonMag

+0

也許更好的問題:你想以什麼格式顯示「倒計時時間」? 「2時34分21秒」?或「2小時34分21秒」?或者是其他東西? – DonMag

+0

我想它是在「2小時34分21秒。」格式倒計時手錶只需要2個小時下來算...不...那是因爲它是爲特定目的。 –

回答

0

這裏是一個秒數轉換成格式化的時,分,秒串一個方式:

func hmsFromSecondsFormatted(seconds: Int) -> String { 

    let h = seconds/3600 
    let m = (seconds % 3600)/60 
    let s = seconds % 60 

    var newText = "" 

    if h > 0 { 
     newText += "\(h)" 
     if h == 1 { 
      newText += " hour, " 
     } else { 
      newText += " hours, " 
     } 
    } 

    if m > 0 || h > 0 { 
     newText += "\(m)" 
     if m == 1 { 
      newText += " minute, " 
     } else { 
      newText += " minutes, " 
     } 
    } 

    newText += "\(s)" 
    if s == 1 { 
     newText += " second" 
    } else { 
     newText += " seconds" 
    } 

    return newText 

} 

然後,你可以使用這樣的:

label.text = hmsFromSecondsFormatted(secondsCount) 

多重if條件給你兩件事情:

  1. 單數/複數時間組件名稱的結果(這樣就可以獲得「1秒」,而不是「1秒。」),並且只有

  2. 返回必要的時間組件。所以45秒返回爲「四五秒。」而不是「0小時0分45秒」

在您的實際應用,你也可能會使用的時間成分名稱的本地化字符串。

希望幫助:)

+0

這正是我需要的邏輯,非常感謝您的意見! –