ios - 我想切换时间洗涤器以 15 分钟为间隔

标签 ios swift uislider

请建议我每隔 15 分钟去一次。 例如:4:00、4:15、4:30、4:45 等等。

 @IBAction func sliderMoved(sender: UISlider) {

       let slot = Double(sender.value)
       let slotDate = self.timeFromSlot(slot)

       print(timeFormatter.stringFromDate(slotDate!))
    }

    private func timeFromSlot(slot:Double) -> NSDate? {

        let cal = NSCalendar.currentCalendar()
        let unit:NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second]
        let comps = cal.components(unit, fromDate: NSDate())
        comps.hour = Int((slot % (24 * 3600)) / 3600)
        comps.minute = Int(slot % 3600 / 60)
        comps.second = 0

        let startedDate = cal.dateFromComponents(comps)!

        return startedDate
    }

我有 sliderMoved,起点是上午 8:00,终点是晚上 9:00 我设置了 slider 最小值 28,800 和最大值 75,600,当我滑动 slider 时,值随着我的 timeFromSlot 方法和更改后的值而变化我在 8:01 8:02 8:03 之间到达。我想像这样更改值 8:00 8:15 8:30。

最佳答案

对于您的情况,最好使用一些部分缩放。尝试下面的代码。我相信这非常简单。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var slider: UISlider!
    @IBOutlet weak var label: UILabel!

    let ticksCount: Float = 13*4 // 15mins intervals count from 8am till 9pm
    let calendar = NSCalendar.currentCalendar()
    let todayDate = NSDate()

    override func viewDidLoad() {
        super.viewDidLoad()

        slider.minimumValue = 0
        slider.maximumValue = ticksCount
    }

    @IBAction func onValueChanged(slider: UISlider) {

        let minutesFromDayStart = 8 * 60 + Int(slider.value) * 15 // total minutes from day start, assuming we use intervals from 8am
        let timeSlotDate = dateWithTimeSlotForDate(todayDate, minutesFromDayStart: minutesFromDayStart)
        showDate(timeSlotDate)
    }

    private func showDate(date: NSDate) {
        let df = NSDateFormatter()
        df.dateStyle = .MediumStyle
        df.timeStyle = .MediumStyle

        label.text = df.stringFromDate(date)
    }

    private func dateWithTimeSlotForDate(date: NSDate, minutesFromDayStart: Int) -> NSDate {

        let dayStart = dayStartDateForDate(date)
        return calendar.dateByAddingUnit(.Minute, value: minutesFromDayStart, toDate: dayStart, options: NSCalendarOptions(rawValue: 0))!
    }

    private func dayStartDateForDate(date: NSDate) -> NSDate {
        return calendar.startOfDayForDate(date)
    }
}

关于ios - 我想切换时间洗涤器以 15 分钟为间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873530/

相关文章:

java - LibgdxcomputeGlyphAdvancesAndPositions 不存在

ios - 如何将大图像添加到 UISlider 背景或放置在 ScrollView 中?

iphone - slider 上的 TCP/IP 连接

ios - 将 UiSlider 间隔设置为 0.5

ios - 如何在 SceneKit 场景编辑器中设置多重碰撞

ios - 在 didSelectItemAt 中,单元格的委托(delegate)为零

iphone - 有没有好的开源 iOS 应用程序模板?

ios - Firebase Messenger 发送通知,但 iOS 设备未收到任何消息

ios - 在 UIPreviewAction 上添加图标或图像

swift - swift 不允许在函数参数中初始化吗?