RCTSlider.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #import "RCTSlider.h"
  8. @implementation RCTSlider {
  9. float _unclippedValue;
  10. }
  11. - (void)setValue:(float)value
  12. {
  13. _unclippedValue = value;
  14. super.value = value;
  15. }
  16. - (void)setMinimumValue:(float)minimumValue
  17. {
  18. super.minimumValue = minimumValue;
  19. super.value = _unclippedValue;
  20. }
  21. - (void)setMaximumValue:(float)maximumValue
  22. {
  23. super.maximumValue = maximumValue;
  24. super.value = _unclippedValue;
  25. }
  26. - (void)setTrackImage:(UIImage *)trackImage
  27. {
  28. if (trackImage != _trackImage) {
  29. _trackImage = trackImage;
  30. CGFloat width = trackImage.size.width / 2;
  31. UIImage *minimumTrackImage = [trackImage resizableImageWithCapInsets:(UIEdgeInsets){0, width, 0, width}
  32. resizingMode:UIImageResizingModeStretch];
  33. UIImage *maximumTrackImage = [trackImage resizableImageWithCapInsets:(UIEdgeInsets){0, width, 0, width}
  34. resizingMode:UIImageResizingModeStretch];
  35. [self setMinimumTrackImage:minimumTrackImage forState:UIControlStateNormal];
  36. [self setMaximumTrackImage:maximumTrackImage forState:UIControlStateNormal];
  37. }
  38. }
  39. - (void)setMinimumTrackImage:(UIImage *)minimumTrackImage
  40. {
  41. _trackImage = nil;
  42. minimumTrackImage =
  43. [minimumTrackImage resizableImageWithCapInsets:(UIEdgeInsets){0, minimumTrackImage.size.width, 0, 0}
  44. resizingMode:UIImageResizingModeStretch];
  45. [self setMinimumTrackImage:minimumTrackImage forState:UIControlStateNormal];
  46. }
  47. - (UIImage *)minimumTrackImage
  48. {
  49. return [self thumbImageForState:UIControlStateNormal];
  50. }
  51. - (void)setMaximumTrackImage:(UIImage *)maximumTrackImage
  52. {
  53. _trackImage = nil;
  54. maximumTrackImage =
  55. [maximumTrackImage resizableImageWithCapInsets:(UIEdgeInsets){0, 0, 0, maximumTrackImage.size.width}
  56. resizingMode:UIImageResizingModeStretch];
  57. [self setMaximumTrackImage:maximumTrackImage forState:UIControlStateNormal];
  58. }
  59. - (UIImage *)maximumTrackImage
  60. {
  61. return [self thumbImageForState:UIControlStateNormal];
  62. }
  63. - (void)setThumbImage:(UIImage *)thumbImage
  64. {
  65. [self setThumbImage:thumbImage forState:UIControlStateNormal];
  66. }
  67. - (UIImage *)thumbImage
  68. {
  69. return [self thumbImageForState:UIControlStateNormal];
  70. }
  71. - (void)accessibilityIncrement
  72. {
  73. [super accessibilityIncrement];
  74. if (_onSlidingComplete) {
  75. _onSlidingComplete(@{
  76. @"value" : @(self.value),
  77. });
  78. }
  79. }
  80. - (void)accessibilityDecrement
  81. {
  82. [super accessibilityDecrement];
  83. if (_onSlidingComplete) {
  84. _onSlidingComplete(@{
  85. @"value" : @(self.value),
  86. });
  87. }
  88. }
  89. @end