2016-09-13 2 views
0

Я смотрю на этой реализации ползунка диапазона: https://github.com/warchimede/RangeSlider, и я вижу, что он имеет lowerValue и upperValue устанавливаются по умолчанию 0.2 и 0.8:Как использовать диапазон слайдера с датами вместо цифр в Swift?

@IBInspectable var lowerValue: Double = 0.2 { 
    didSet { 
     if lowerValue < minimumValue { 
      lowerValue = minimumValue 
     } 
     updateLayerFrames() 
    } 
} 

@IBInspectable var upperValue: Double = 0.8 { 
    didSet { 
     if upperValue > maximumValue { 
      upperValue = maximumValue 
     } 
     updateLayerFrames() 
    } 
} 

Он также minimumValue и maximumValue значения 0 и 1:

@IBInspectable var minimumValue: Double = 0.0 { 
    willSet(newValue) { 
     assert(newValue < maximumValue, "RangeSlider: minimumValue should be lower than maximumValue") 
    } 
    didSet { 
     updateLayerFrames() 
    } 
} 

@IBInspectable var maximumValue: Double = 1.0 { 
    willSet(newValue) { 
     assert(newValue > minimumValue, "RangeSlider: maximumValue should be greater than minimumValue") 
    } 
    didSet { 
     updateLayerFrames() 
    } 
} 

Я хотел бы изменить поведение этого ползунка, так что он становится диапазон дат выбора - maximumValue должна быть текущая дата и minimumValue некоторые даты в прошлом, например, 6 месяцев назад. Не могли бы вы помочь мне с этим и дать некоторые подсказки, можно ли сделать это с помощью этого ползунка диапазона?

ответ

2

Это должно быть сделано.

class ViewController: UIViewController { 

    var slider:UISlider? 
    // These number values represent each slider position 
    let daysInPast = [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] //Add your values here - this sets from two past weeks to current day 
    let secondsPerDay = 86400 
    var oldIndex = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     slider = UISlider(frame: self.view.bounds) 
     self.view.addSubview(slider!) 

     // slider values go from 0 to the number of values in your numbers array 
     var numberOfSteps = Float(numbers.count - 1) 
     slider!.maximumValue = numberOfSteps; 
     slider!.minimumValue = 0; 

     // As the slider moves it will continously call the -valueChanged: 
     slider!.continuous = true; // false makes it call only once you let go 
     slider!.addTarget(self, action: "valueChanged:", forControlEvents: .ValueChanged) 
    } 

    func valueChanged(sender: UISlider) { 
     // round the slider position to the nearest index of the numbers array 
     var index = (Int)(slider!.value + 0.5); 
     slider?.setValue(Float(index), animated: false) 
     var dayInPast = daysInPast[index]; // <-- This numeric value you want 

     if oldIndex != index { 

      let today = NSDate() //today 
      //every day value in the slider will be multiplied by number of seconds in day 
      let pickedDate = today.dateByAddingTimeInterval(-secondsPerDay * dayInPast) 
      let calendar = NSCalendar.currentCalendar() 
      let components = calendar.components([.Month, .Year, .Day], fromDate: pickedDate) 
      let month = components.month 
      let year = components.year 
      let day = components.day 

      print("Date picked with slider is \(month)/\(day), \(year)") 

      oldIndex = index 
     } 
    } 
} 
+0

спасибо, однако я хочу сделать выбор времени для выбора даты, поэтому пользователь может выбрать диапазон между двумя датами - и он может изменять обе даты на слайдере. В вашем решении есть выбор только одной даты :( – user3766930

+0

Вы не упомянули об этом в своем OP.Таким образом, приведенный выше код может быть легко адаптирован для использования пользовательского диапазона - с минимальными усилиями с вашей стороны , –

Смежные вопросы