UI滑块超越午夜的时间?

时间:2015-11-09 20:11:12

标签: ios swift nsdatecomponentsformatter

所以这是一个独特的情况。我有一个双滑块,我使用swift制作一个时间范围选择器,就像Kayak一样。不幸的是,我需要在00:00之间到第二天早上04:00的时间范围内。

enter image description here

使用我的滑块控件的86340秒刻度很容易从00:00到23:59获得它。我只需将其插入这个小功能,然后在两端/旋钮上弹出正确的范围:

func getTimeStringFromSeconds(seconds: Double) -> String {
    let dcFormatter = NSDateComponentsFormatter()
    dcFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehavior.Pad
    dcFormatter.allowedUnits = [NSCalendarUnit.Hour, NSCalendarUnit.Minute]
    dcFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Positional
    return dcFormatter.stringFromTimeInterval(seconds)!
}

正如您在上面的屏幕截图中看到的,虽然我有100740秒作为比例。如何让它超过23:59,然后重置为00:00并进入第二天?如上所示,我可以进入28:00,技术上是凌晨4点,但我希望它重新开始并显示04:00,而不是28:00。对此有什么好的解决方案?

就像一张纸条一样,到目前为止,我唯一的解决办法就是让标签在0:00超过86340时通过将秒数重置为0.00来说明0:00。比例仍然是100740但是有一些数学如下使标签另有说法而不弄乱旋钮的值(upperValue):

if upperKnobLayer.highlighted {
            upperValue += valueDelta
            upperValue = max(min(maximumValue, upperValue), lowerValue)
            var upperDouble = Double(round(upperValue))
            if upperDouble > 86340.00 {
                let newValue = upperDouble - 86340
                upperDouble = 0.00 + newValue
            }
            upperTime = getTimeStringFromSeconds(upperDouble)
}

2 个答案:

答案 0 :(得分:1)

发布您的选择器的实现会有所帮助,但通常您希望滑块值类型为NSTimeIntervals。然后你可以有一个参考日期,它将是今天午夜00:00。您可以使用NSDate(timeIntervalSince:referenceDate)然后获取一个NSDate,表示自该参考日期以来的任何日期,可以相应地格式化并显示到屏幕上。这种方式的另一个好处是,如果你的timeInterval让它溢出到第二天,那么日期的实际日期是正确的

答案 1 :(得分:1)

如何将标准化为一天的秒数。

div.rest {
    width: calc(50% - 150px);
    width: -webkit-calc(50% - 150px);
    width: -o-calc(50% - 150px);
    width: -moz-calc(50% - 150px);
}