Skip to content

Commit

Permalink
update RangeSeekSliderDelegate
Browse files Browse the repository at this point in the history
  • Loading branch information
WorldDownTown committed Mar 14, 2017
1 parent cedb0eb commit ab14a18
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 22 deletions.
50 changes: 42 additions & 8 deletions Demo/RangeSeekSliderDemo/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@
<userDefinedRuntimeAttribute type="number" keyPath="maxDistance">
<real key="value" value="80"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="minValueString" value="Free"/>
</userDefinedRuntimeAttributes>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Custom Range and Image Handle:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AzH-aT-IDj">
Expand Down Expand Up @@ -128,11 +127,7 @@
</userDefinedRuntimeAttributes>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Hidden Labels:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oXk-Mj-BG8">
<rect key="frame" x="16" y="484" width="207" height="21"/>
<constraints>
<constraint firstAttribute="width" constant="207" id="Sna-ai-U0a"/>
<constraint firstAttribute="height" constant="21" id="fwf-Nv-DuZ"/>
</constraints>
<rect key="frame" x="16" y="484" width="114.5" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
Expand All @@ -158,8 +153,41 @@
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Custom Label String:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qwj-Dy-ogm">
<rect key="frame" x="16" y="600" width="160.5" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gdz-ut-dL8" customClass="RangeSeekSlider" customModule="RangeSeekSlider">
<rect key="frame" x="16" y="631" width="343" height="65"/>
<color key="tintColor" red="0.94509803920000002" green="0.32156862749999998" blue="0.63921568630000003" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="65" id="wa9-1w-B3f"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="step">
<real key="value" value="0.0"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="minDistance">
<real key="value" value="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="selectedMaxValue">
<real key="value" value="67"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="selectedMinValue">
<real key="value" value="0.0"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="minValue">
<real key="value" value="0.0"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="maxValue">
<real key="value" value="67"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="By WorldDownTown" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l8Q-0R-HSN">
<rect key="frame" x="230" y="600" width="128.5" height="17"/>
<rect key="frame" x="230" y="716" width="128.5" height="17"/>
<fontDescription key="fontDescription" type="italicSystem" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
Expand All @@ -180,11 +208,14 @@
<constraint firstAttribute="trailing" secondItem="Ziu-u7-MMb" secondAttribute="trailing" constant="16" id="IhU-gZ-Ury"/>
<constraint firstItem="AzH-aT-IDj" firstAttribute="top" secondItem="aHO-Yd-TsS" secondAttribute="bottom" constant="20" id="Jm6-vy-cvb"/>
<constraint firstItem="C9a-jS-yyk" firstAttribute="top" secondItem="wcl-zp-wAu" secondAttribute="top" constant="20" id="OPi-3h-sYH"/>
<constraint firstItem="gdz-ut-dL8" firstAttribute="top" secondItem="qwj-Dy-ogm" secondAttribute="bottom" constant="10" id="Rxx-Zc-1gn"/>
<constraint firstItem="qwj-Dy-ogm" firstAttribute="leading" secondItem="wcl-zp-wAu" secondAttribute="leading" constant="16" id="S7C-ay-c6D"/>
<constraint firstItem="9hi-ch-oTe" firstAttribute="top" secondItem="oXk-Mj-BG8" secondAttribute="bottom" constant="10" id="Tzv-ph-4vH"/>
<constraint firstItem="4K8-GF-10z" firstAttribute="leading" secondItem="wcl-zp-wAu" secondAttribute="leading" constant="16" id="VIk-99-ySf"/>
<constraint firstItem="gdz-ut-dL8" firstAttribute="leading" secondItem="wcl-zp-wAu" secondAttribute="leading" constant="16" id="XEq-D5-ZxF"/>
<constraint firstItem="oXk-Mj-BG8" firstAttribute="top" secondItem="Ziu-u7-MMb" secondAttribute="bottom" constant="20" id="XKs-WW-biu"/>
<constraint firstItem="aHO-Yd-TsS" firstAttribute="leading" secondItem="wcl-zp-wAu" secondAttribute="leading" constant="16" id="Y1X-H5-hUN"/>
<constraint firstItem="l8Q-0R-HSN" firstAttribute="top" secondItem="9hi-ch-oTe" secondAttribute="bottom" constant="20" id="Yms-sl-V3V"/>
<constraint firstAttribute="trailing" secondItem="gdz-ut-dL8" secondAttribute="trailing" constant="16" id="c1d-VF-WkS"/>
<constraint firstItem="hFS-hr-Hy5" firstAttribute="top" secondItem="AzH-aT-IDj" secondAttribute="bottom" constant="10" id="eES-ut-gGD"/>
<constraint firstItem="evq-sI-chw" firstAttribute="width" secondItem="wcl-zp-wAu" secondAttribute="width" constant="-32" id="esr-Wi-gO8"/>
<constraint firstItem="oXk-Mj-BG8" firstAttribute="leading" secondItem="wcl-zp-wAu" secondAttribute="leading" constant="16" id="jfD-EA-Chg"/>
Expand All @@ -195,6 +226,8 @@
<constraint firstAttribute="bottom" secondItem="l8Q-0R-HSN" secondAttribute="bottom" constant="20" id="sK7-od-7oN"/>
<constraint firstAttribute="trailing" secondItem="l8Q-0R-HSN" secondAttribute="trailing" constant="16" id="tDo-M2-uBo"/>
<constraint firstItem="AzH-aT-IDj" firstAttribute="leading" secondItem="wcl-zp-wAu" secondAttribute="leading" constant="16" id="tFx-Hv-4vR"/>
<constraint firstItem="qwj-Dy-ogm" firstAttribute="top" secondItem="9hi-ch-oTe" secondAttribute="bottom" constant="20" id="y1k-To-61Y"/>
<constraint firstItem="l8Q-0R-HSN" firstAttribute="top" secondItem="gdz-ut-dL8" secondAttribute="bottom" constant="20" id="zlo-Vh-ix6"/>
</constraints>
</scrollView>
</subviews>
Expand All @@ -211,6 +244,7 @@
<outlet property="rangeSlider" destination="evq-sI-chw" id="k72-tE-yA5"/>
<outlet property="rangeSliderCurrency" destination="aHO-Yd-TsS" id="hMn-Ta-0mN"/>
<outlet property="rangeSliderCustom" destination="hFS-hr-Hy5" id="3wt-ag-AhN"/>
<outlet property="rangeSliderCustomString" destination="gdz-ut-dL8" id="8C5-lV-cJC"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="YCF-VE-LZM" sceneMemberID="firstResponder"/>
Expand Down
42 changes: 42 additions & 0 deletions Demo/RangeSeekSliderDemo/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,17 @@ final class ViewController: UIViewController {
@IBOutlet fileprivate weak var rangeSlider: RangeSeekSlider!
@IBOutlet fileprivate weak var rangeSliderCurrency: RangeSeekSlider!
@IBOutlet fileprivate weak var rangeSliderCustom: RangeSeekSlider!
@IBOutlet fileprivate weak var rangeSliderCustomString: RangeSeekSlider!

fileprivate let prices: [Int] = [
.min, 500, 1_000, 2_000, 3_000, 4_000, 5_000, 6_000, 7_000, 8_000, 9_000,
10_000, 11_000, 12_000, 13_000, 14_000, 15_000, 16_000, 17_000, 18_000, 19_000,
20_000, 21_000, 22_000, 23_000, 24_000, 25_000, 26_000, 27_000, 28_000, 29_000,
30_000, 31_000, 32_000, 33_000, 34_000, 35_000, 36_000, 37_000, 38_000, 39_000,
40_000, 41_000, 42_000, 43_000, 44_000, 45_000, 46_000, 47_000, 48_000, 49_000,
50_000, 55_000, 60_000, 65_000, 70_000, 75_000, 80_000, 85_000, 90_000, 95_000,
100_000, 110_000, 120_000, 130_000, 140_000, 150_000, .max,
]

override func viewDidLoad() {
super.viewDidLoad()
Expand Down Expand Up @@ -54,6 +65,25 @@ final class ViewController: UIViewController {
rangeSliderCustom.lineHeight = 10.0
rangeSliderCustom.numberFormatter.positivePrefix = "$"
rangeSliderCustom.numberFormatter.positiveSuffix = "M"

// custom label string range slider
rangeSliderCustomString.delegate = self
rangeSliderCustomString.minValue = 0.0
rangeSliderCustomString.maxValue = CGFloat(prices.count - 1)
rangeSliderCustomString.selectedMinValue = 0
rangeSliderCustomString.selectedMaxValue = CGFloat(prices.count - 1)
rangeSliderCustomString.minDistance = 1.0
}

fileprivate func priceString(value: CGFloat) -> String {
let index: Int = Int(roundf(Float(value)))
if index == 0 {
return "Min"
} else if index == prices.count - 1 {
return "Max"
} else {
return "\(prices[index])"
}
}
}

Expand All @@ -79,4 +109,16 @@ extension ViewController: RangeSeekSliderDelegate {
func didEndTouches(in slider: RangeSeekSlider) {
print("did end touches")
}

func rangeSeekSlider(_ slider: RangeSeekSlider, stringForMinValue minValue: CGFloat) -> String? {
guard slider == rangeSliderCustomString else { return nil }

return priceString(value: minValue)
}

func rangeSeekSlider(_ slider: RangeSeekSlider, stringForMaxValue maxValue: CGFloat) -> String? {
guard slider == rangeSliderCustomString else { return nil }

return priceString(value: maxValue)
}
}
2 changes: 1 addition & 1 deletion RangeSeekSlider.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'RangeSeekSlider'
s.version = '1.1.0'
s.version = '1.2.0'
s.summary = 'RangeSeedSlider provides a customizable range slider like a UISlider.'
s.description = <<-DESC
RangeSeedSlider provides a customizable range slider like a UISlider.
Expand Down
14 changes: 4 additions & 10 deletions Sources/RangeSeekSlider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,6 @@ import UIKit
}
}

/// String of the label when the handle is set to the minimum value.
@IBInspectable public var minValueString: String?

/// String of the label when the handle is set to the maximum value.
@IBInspectable public var maxValueString: String?

/// The font of the minimum value text label. If not set, the default is system font size 12.0.
public var minLabelFont: UIFont = UIFont.systemFont(ofSize: 12.0) {
didSet {
Expand Down Expand Up @@ -525,14 +519,14 @@ import UIKit
return
}

if let minValueString = minValueString, selectedMinValue == minValue {
minLabel.string = minValueString
if let replacedString = delegate?.rangeSeekSlider(self, stringForMinValue: selectedMinValue) {
minLabel.string = replacedString
} else {
minLabel.string = numberFormatter.string(from: selectedMinValue as NSNumber)
}

if let maxValueString = maxValueString, selectedMaxValue == maxValue {
maxLabel.string = maxValueString
if let replacedString = delegate?.rangeSeekSlider(self, stringForMaxValue: selectedMaxValue) {
maxLabel.string = replacedString
} else {
maxLabel.string = numberFormatter.string(from: selectedMaxValue as NSNumber)
}
Expand Down
24 changes: 21 additions & 3 deletions Sources/RangeSeekSliderDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,39 @@ import CoreGraphics

public protocol RangeSeekSliderDelegate: class {

/// Called when the RangeSlider values are changed
/// Called when the RangeSeekSlider values are changed
///
/// - Parameters:
/// - slider: RangeSeekSlider
/// - minValue: minimum value
/// - maxValue: maximum value
func rangeSeekSlider(_ slider: RangeSeekSlider, didChange minValue: CGFloat, maxValue: CGFloat)

/// Called when the user has started interacting with the RangeSlider
/// Called when the user has started interacting with the RangeSeekSlider
///
/// - Parameter slider: RangeSeekSlider
func didStartTouches(in slider: RangeSeekSlider)

/// Called when the user has finished interacting with the RangeSlider
/// Called when the user has finished interacting with the RangeSeekSlider
///
/// - Parameter slider: RangeSeekSlider
func didEndTouches(in slider: RangeSeekSlider)

/// Called when the RangeSeekSlider values are changed. A return `String?` Value is displayed on the `minLabel`.
///
/// - Parameters:
/// - slider: RangeSeekSlider
/// - minValue: minimum value
/// - Returns: String to be replaced
func rangeSeekSlider(_ slider: RangeSeekSlider, stringForMinValue minValue: CGFloat) -> String?

/// Called when the RangeSeekSlider values are changed. A return `String?` Value is displayed on the `maxLabel`.
///
/// - Parameters:
/// - slider: RangeSeekSlider
/// - maxValue: maximum value
/// - Returns: String to be replaced
func rangeSeekSlider(_ slider: RangeSeekSlider, stringForMaxValue: CGFloat) -> String?
}


Expand All @@ -37,4 +53,6 @@ public extension RangeSeekSliderDelegate {
func rangeSeekSlider(_ slider: RangeSeekSlider, didChange minValue: CGFloat, maxValue: CGFloat) {}
func didStartTouches(in slider: RangeSeekSlider) {}
func didEndTouches(in slider: RangeSeekSlider) {}
func rangeSeekSlider(_ slider: RangeSeekSlider, stringForMinValue minValue: CGFloat) -> String? { return nil }
func rangeSeekSlider(_ slider: RangeSeekSlider, stringForMaxValue maxValue: CGFloat) -> String? { return nil }
}

0 comments on commit ab14a18

Please sign in to comment.