2016-09-13 3 views
0

私は、範囲スライダのこの実装で探しています:https://github.com/warchimede/RangeSliderと私はそれが0.2と0.8にデフォルトで設定されlowerValueとupperValueを持っていることを参照してください。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() 
    } 
} 

また、最小値と最大値は、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() 
    } 
} 

それは範囲の日付ピッカーになるように、私は、このスライダの動作を変更したい - 最大値は、過去の現在の日付と最小値いくつかの日付である必要があり、例えば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

ありがとうございますが、私はレンジ日付のピッカーを作成したいので、ユーザは2つの日付の間の範囲を選択できます。そして、彼は両方の日付をスライダで変更できます。あなたのソリューションには、単一の日付だけの選択肢があります:( – user3766930

+0

あなたはあなたのOPでそれを言及していませんでしたが、上記のコードは簡単にカスタム範囲を使用するように調整できます。 。 –

関連する問題