PFSlider.m 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //
  2. // PFSlider.m
  3. // PFAPIDemoBar
  4. //
  5. //
  6. // Created by mumu on 2021/9/6.
  7. //
  8. #import "PFSlider.h"
  9. #import "PFDemoBarDefine.h"
  10. #import "UIImage+demobar.h"
  11. #import "UIColor+PFAPIDemoBar.h"
  12. @implementation PFSlider
  13. {
  14. UILabel *tipLabel;
  15. UIImageView *bgImgView;
  16. UIView *middleView ;
  17. UIView *line ;
  18. }
  19. - (void)awakeFromNib
  20. {
  21. [super awakeFromNib];
  22. [self setThumbImage:[UIImage imageWithName:@"expource_slider_dot"] forState:UIControlStateNormal];
  23. UIImage *bgImage = [UIImage imageWithName:@"slider_tip_bg"];
  24. bgImgView = [[UIImageView alloc] initWithImage:bgImage];
  25. bgImgView.frame = CGRectMake(0, -bgImage.size.height, bgImage.size.width, bgImage.size.height);
  26. [self addSubview:bgImgView];
  27. tipLabel = [[UILabel alloc] initWithFrame:bgImgView.frame];
  28. tipLabel.text = @"";
  29. tipLabel.textColor = [UIColor darkGrayColor];
  30. tipLabel.font = [UIFont systemFontOfSize:14];
  31. tipLabel.textAlignment = NSTextAlignmentCenter;
  32. tipLabel.backgroundColor = [UIColor clearColor];
  33. [self addSubview:tipLabel];
  34. bgImgView.hidden = YES;
  35. tipLabel.hidden = YES;
  36. }
  37. -(instancetype)initWithFrame:(CGRect)frame{
  38. if (self = [super initWithFrame:frame]) {
  39. [self setThumbImage:[UIImage imageWithName:@"expource_slider_dot"] forState:UIControlStateNormal];
  40. UIImage *bgImage = [UIImage imageWithName:@"slider_tip_bg"];
  41. bgImgView = [[UIImageView alloc] initWithImage:bgImage];
  42. bgImgView.frame = CGRectMake(0, -bgImage.size.height, bgImage.size.width, bgImage.size.height);
  43. [self addSubview:bgImgView];
  44. tipLabel = [[UILabel alloc] initWithFrame:bgImgView.frame];
  45. tipLabel.text = @"";
  46. tipLabel.textColor = [UIColor darkGrayColor];
  47. tipLabel.font = [UIFont systemFontOfSize:14];
  48. tipLabel.textAlignment = NSTextAlignmentCenter;
  49. tipLabel.backgroundColor = [UIColor clearColor];
  50. [self addSubview:tipLabel];
  51. bgImgView.hidden = YES;
  52. tipLabel.hidden = YES;
  53. }
  54. return self;
  55. }
  56. -(void)layoutSubviews {
  57. [super layoutSubviews];
  58. if (!middleView) {
  59. middleView = [[UIView alloc] initWithFrame:CGRectMake(2, self.frame.size.height /2.0 - 2, 100, 4)];
  60. middleView.backgroundColor = [UIColor colorWithHexColorString:@"BAACFF"];
  61. middleView.hidden = YES;
  62. [self insertSubview:middleView atIndex: self.subviews.count - 1];
  63. }
  64. if (!line) {
  65. line = [[UIView alloc] init];
  66. line.backgroundColor = [UIColor whiteColor];
  67. line.layer.masksToBounds = YES ;
  68. line.layer.cornerRadius = 1.0 ;
  69. line.hidden = YES;
  70. [self insertSubview:line atIndex: self.subviews.count - 1];
  71. }
  72. line.frame = CGRectMake(self.frame.size.width / 2.0 - 1.0, 4.0, 2.0, self.frame.size.height - 8.0) ;
  73. CGFloat value = self.value ;
  74. [self setValue:value animated:NO];
  75. }
  76. -(void)setType:(PFSliderType)type {
  77. _type = type ;
  78. switch (_type) {
  79. case FUFilterSliderType101:{
  80. line.hidden = NO ;
  81. middleView.hidden = NO ;
  82. [self setMinimumTrackTintColor:[UIColor whiteColor]];
  83. }
  84. break;
  85. default:{
  86. line.hidden = YES ;
  87. middleView.hidden = YES ;
  88. [self setMinimumTrackTintColor:[UIColor colorWithHexColorString:@"BAACFF"]];
  89. }
  90. break;
  91. }
  92. }
  93. // 后设置 value
  94. - (void)setValue:(float)value animated:(BOOL)animated {
  95. [super setValue:value animated:animated];
  96. switch (_type) {
  97. case FUFilterSliderType101:{
  98. tipLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100 - 50)];
  99. CGFloat currentValue = value - 0.5 ;
  100. CGFloat width = currentValue * (self.frame.size.width - 4);
  101. if (width < 0 ) {
  102. width = -width ;
  103. }
  104. CGFloat X = currentValue > 0 ? self.frame.size.width / 2.0 : self.frame.size.width / 2.0 - width ;
  105. CGRect frame = middleView.frame ;
  106. frame = CGRectMake(X, frame.origin.y, width, frame.size.height) ;
  107. middleView.frame = frame ;
  108. }
  109. break ;
  110. default:{
  111. tipLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100)];
  112. }
  113. break;
  114. }
  115. CGFloat x = value * (self.frame.size.width - 20) - tipLabel.frame.size.width * 0.5 + 10;
  116. CGRect frame = tipLabel.frame;
  117. frame.origin.x = x;
  118. bgImgView.frame = frame;
  119. tipLabel.frame = frame;
  120. tipLabel.hidden = !self.tracking;
  121. bgImgView.hidden = !self.tracking;
  122. }
  123. @end