Guest User

Untitled

a guest
Jun 17th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. @IBDesignable
  2. class GradientSlider: UISlider {
  3.  
  4. @IBInspectable var thickness: CGFloat = 20 {
  5. didSet {
  6. setup()
  7. }
  8. }
  9.  
  10. @IBInspectable var sliderThumbImage: UIImage? {
  11. didSet {
  12. setup()
  13. }
  14. }
  15.  
  16. func setup() {
  17. let minTrackStartColor = Palette.SelectiveYellow
  18. let minTrackEndColor = Palette.BitterLemon
  19. let maxTrackColor = Palette.Firefly
  20. do {
  21. self.setMinimumTrackImage(try self.gradientImage(
  22. size: self.trackRect(forBounds: self.bounds).size,
  23. colorSet: [minTrackStartColor.cgColor, minTrackEndColor.cgColor]),
  24. for: .normal)
  25. self.setMaximumTrackImage(try self.gradientImage(
  26. size: self.trackRect(forBounds: self.bounds).size,
  27. colorSet: [maxTrackColor.cgColor, maxTrackColor.cgColor]),
  28. for: .normal)
  29. self.setThumbImage(sliderThumbImage, for: .normal)
  30. } catch {
  31. self.minimumTrackTintColor = minTrackStartColor
  32. self.maximumTrackTintColor = maxTrackColor
  33. }
  34. }
  35.  
  36. func gradientImage(size: CGSize, colorSet: [CGColor]) throws -> UIImage? {
  37. let tgl = CAGradientLayer()
  38. tgl.frame = CGRect.init(x:0, y:0, width:size.width, height: size.height)
  39. tgl.cornerRadius = tgl.frame.height / 2
  40. tgl.masksToBounds = false
  41. tgl.colors = colorSet
  42. tgl.startPoint = CGPoint.init(x:0.0, y:0.5)
  43. tgl.endPoint = CGPoint.init(x:1.0, y:0.5)
  44.  
  45. UIGraphicsBeginImageContextWithOptions(size, tgl.isOpaque, 0.0);
  46. guard let context = UIGraphicsGetCurrentContext() else { return nil }
  47. tgl.render(in: context)
  48. let image =
  49.  
  50. UIGraphicsGetImageFromCurrentImageContext()?.resizableImage(withCapInsets:
  51. UIEdgeInsets.init(top: 0, left: size.height, bottom: 0, right: size.height))
  52. UIGraphicsEndImageContext()
  53. return image!
  54. }
  55.  
  56. override func trackRect(forBounds bounds: CGRect) -> CGRect {
  57. return CGRect(
  58. x: bounds.origin.x,
  59. y: bounds.origin.y,
  60. width: bounds.width,
  61. height: thickness
  62. )
  63. }
  64.  
  65. override init(frame: CGRect) {
  66. super.init(frame: frame)
  67. setup()
  68. }
  69.  
  70. required init?(coder aDecoder: NSCoder) {
  71. super.init(coder: aDecoder)
  72. setup()
  73. }
  74.  
  75.  
  76. }
Add Comment
Please, Sign In to add comment