@@ -41,7 +41,13 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
4141 }
4242 }
4343
44- @IBInspectable public var tickTintColor : UIColor ? = nil {
44+ @IBInspectable public var minimumTickTintColor : UIColor ? = nil {
45+ didSet {
46+ layoutTrack ( )
47+ }
48+ }
49+
50+ @IBInspectable public var maximumTickTintColor : UIColor ? = nil {
4551 didSet {
4652 layoutTrack ( )
4753 }
@@ -78,7 +84,7 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
7884 }
7985 }
8086
81- @IBInspectable public var maximumTrackTintColor : UIColor = UIColor ( white: 0.71 , alpha: 1 ) {
87+ @IBInspectable public var maximumTrackTintColor = UIColor ( white: 0.71 , alpha: 1 ) {
8288 didSet {
8389 layoutTrack ( )
8490 }
@@ -223,12 +229,19 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
223229 var ticksAbscissae : [ CGPoint ] = [ ]
224230 var thumbAbscissa : CGFloat = 0
225231 var thumbLayer = CALayer ( )
232+
233+ var trackLayer = CALayer ( )
226234 var leftTrackLayer = CALayer ( )
227235 var rightTrackLayer = CALayer ( )
228- var trackLayer = CALayer ( )
229236 var leadingTrackLayer : CALayer !
230237 var trailingTrackLayer : CALayer !
238+
231239 var ticksLayer = CALayer ( )
240+ var leftTicksLayer = CALayer ( )
241+ var rightTicksLayer = CALayer ( )
242+ var leadingTicksLayer : CALayer !
243+ var trailingTicksLayer : CALayer !
244+
232245 var trackRectangle = CGRect . zero
233246 var touchedInside = false
234247 var localeCharacterDirection = CFLocaleLanguageDirection . leftToRight
@@ -275,21 +288,27 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
275288 trailingTrackLayer = ( . rightToLeft == localeCharacterDirection)
276289 ? leftTrackLayer
277290 : rightTrackLayer
278-
279- // Track is a clear clipping layer, and left + right sublayers, which brings in free animation
291+ leadingTicksLayer = ( . rightToLeft == localeCharacterDirection)
292+ ? rightTicksLayer
293+ : leftTicksLayer
294+ trailingTicksLayer = ( . rightToLeft == localeCharacterDirection)
295+ ? leftTicksLayer
296+ : rightTicksLayer
297+
298+ // Track and ticks are in a clear clipping layer, and left + right sublayers,
299+ // which brings in free animation
280300 trackLayer. masksToBounds = true
281301 trackLayer. backgroundColor = UIColor . clear. cgColor
282302 layer. addSublayer ( trackLayer)
283303 trackLayer. addSublayer ( leftTrackLayer)
284304 trackLayer. addSublayer ( rightTrackLayer)
285305
286- if let backgroundColor = tintColor {
287- leadingTrackLayer. backgroundColor = backgroundColor. cgColor
288- }
289- rightTrackLayer. backgroundColor = maximumTrackTintColor. cgColor
290-
291306 // Ticks in between track and thumb
307+ ticksLayer. masksToBounds = true
308+ ticksLayer. backgroundColor = UIColor . clear. cgColor
292309 layer. addSublayer ( ticksLayer)
310+ ticksLayer. addSublayer ( rightTicksLayer) // reverse order, left covers right
311+ ticksLayer. addSublayer ( leftTicksLayer)
293312
294313 // The thumb is its own CALayer, which brings in free animation
295314 layer. addSublayer ( thumbLayer)
@@ -300,11 +319,6 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
300319
301320 func drawTicks( ) {
302321 ticksLayer. frame = bounds
303-
304- if let tickColor = tickTintColor ?? tintColor {
305- ticksLayer. backgroundColor = tickColor. cgColor
306- }
307-
308322 let path = UIBezierPath ( )
309323
310324 switch tickComponentStyle {
@@ -363,10 +377,35 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
363377 break
364378 }
365379
366- let maskLayer = CAShapeLayer ( )
367- maskLayer. frame = trackLayer. bounds
368- maskLayer. path = path. cgPath
369- ticksLayer. mask = maskLayer
380+ leftTicksLayer. frame = {
381+ var frame = ticksLayer. bounds
382+ let tickWidth = ( . rightToLeft == localeCharacterDirection)
383+ ? - tickSize . width/ 2
384+ : tickSize. width/ 2
385+ frame. size. width = tickWidth + thumbAbscissa
386+
387+ return frame
388+ } ( )
389+
390+ leftTicksLayer. mask = {
391+ let maskLayer = CAShapeLayer ( )
392+ maskLayer. frame = ticksLayer. bounds
393+ maskLayer. path = path. cgPath
394+ return maskLayer
395+ } ( )
396+
397+ rightTicksLayer. frame = ticksLayer. bounds
398+
399+ rightTicksLayer. mask = {
400+ let maskLayer = CAShapeLayer ( )
401+ maskLayer. path = path. cgPath
402+ return maskLayer
403+ } ( )
404+
405+ if let backgroundColor = minimumTickTintColor ?? ( minimumTrackTintColor ?? tintColor) {
406+ leadingTicksLayer. backgroundColor = backgroundColor. cgColor
407+ }
408+ trailingTicksLayer. backgroundColor = maximumTickTintColor? . cgColor ?? maximumTrackTintColor. cgColor
370409 }
371410
372411 func drawTrack( ) {
0 commit comments