Я хочу переключить скруббер времени на 15 минут

Пожалуйста, представьте, что я хочу пройти 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 AM и конечная точка 9:00 PM. Я установил значение минимального слайдера 28 800 и максимальное значение 75 600. Когда я сдвигаю ползунок, значение изменяется с помощью метода 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) } } 

Это должно быть что-то вроде

  yourSlider.continuous = false @IBAction func sliderMoved(sender: UISlider) { let slot = Double(sender.value) let slotDate = self.timeFromSlot(slot) print(timeFormatter.stringFromDate(slotDate!)) if (sender.value >= 28800 && sender.value < your next interval 1) { sender.value = 28800 } else if (sender.value >= your next interval 1 && sender.value < your next interval 2) { sender.value = your next interval 1 } else if .... } 
  • iOS - UISlider прыгает при первом касании
  • Увеличить / уменьшить яркость изображения с помощью UISlider?
  • Как я могу контролировать значение UISlider Value Changed-events frequncy?
  • Увеличьте целевой размер касания UISlider с помощью Swift
  • Увеличение области «щелчка» большого пальца в UISlider
  • UISlider - добавить UILabel в min / max UIImageView?
  • Измените текст UILabels с использованием значения UISliders
  • Существует ли общий способ уведомления обо всех касаниях, которые были начаты и перемещены на уровне UIViewController?
  • UITapGestureRecognizer вмешивается в UISlider
  • Изменить изображение iPhone UISlider iPhone
  • Кнопка маршрута ios mpvolumeview, не вертикально центрированная по обновлению ios 7.1
  • Interesting Posts
    Давайте будем гением компьютера.