2016-09-27 4 views
0

Ich möchte die Zeit von einem Slider zu einem Label anzeigen. Also muss ich den Wert konvertieren und die aktuelle Tageszeit wie 00:00 am/pm abrufen. Also ich brauche da einen Stepper wie alle 5 Steps drucken (5,10,15,20,25 .... 50,55) Also läuft dieser Code auf der Unterseite nicht gut, habe irgendjemand einen besseren Weg das machen ?Get 12 Stunden am/pm Zeit

Ich versuche es, aber es wird ein Fehler, wenn ich slider zurück (zb:., Wenn Es ist 08.00 Uhr und ich slider zurück nach 07.55 Uhr für erste 07.00 kommen

hier ist der Code:

func valueChange(_ sender: CircleSlider) { 

    let countmin = Int(Double(sender.value) * 14.4) 
    var hour = countmin/60 
    let mins = countmin - (hour*60) 


    if hour >= 12 { 
     hour -= 12 
     Am.text = "Pm" 
    } else { 
     Am.text = "Am" 
    } 



    hours = hour 


    let i = String(mins) 
    switch i { 
     case "Nil": 
      minutes = 00 
     case "0": 
      minutes = 00 
     case "5": 
      minutes = 05 
     case "10": 
      minutes = 10 
     case "15": 
      minutes = 15 
     case "25": 
      minutes = 25 
     case "30": 
      minutes = 30 
     case "35": 
      minutes = 35 
     case "40": 
      minutes = 40 
     case "45": 
      minutes = 45 
     case "50": 
      minutes = 50 
     case "55": 
      minutes = 55 
     case "60": 
      minutes = 60 
     default: 
      break 
    } 


    self.circleTime.text = "\(String(format: "%02d", hours!)):\(String(format: "%02d", minutes!))" 
} 

Thank's für Hilfe :)

+0

Was ist der Beispielwert von Double (sender.value)? –

Antwort

2

ich denke, es ist ein Problem in Ihrer Methode für 07.56, 07.57, 07.58, 07.59 (es ist nicht gut abgeschnitten). Dieser Code sollte für Sie arbeiten:

func valueChange(_ sender: CircleSlider) { 
    let countmin = Int(Double(sender.value) * 14.4) 

    var hour = countmin/60 
    let mins = countmin - (hour * 60) 

    if hour >= 12 { 
     hour -= 12 
     Am = "Pm" 
    } else { 
     Am = "Am" 
    } 

    hours = hour 
    minutes = roundToFives(Double(mins)) 

    // This fixes when you have hh:60. For instance, it fixes 7:60 to 8:00 
    if minutes == 60 { 
     hours = hour + 1 
     minutes = 0 
    } 

    self.circleTime.text = "\(String(format: "%02d", hours!)):\(String(format: "%02d", minutes!))" 
} 

// idea of this method comes from: http://stackoverflow.com/questions/27922406/round-double-to-closest-10-swift 
private func roundToFives(x : Double) -> Int { 
    return 5 * Int(round(x/5.0)) 
} 
Verwandte Themen