FUSlider.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. //
  2. // FUSlider.m
  3. // FUAPIDemoBar
  4. //
  5. // Created by L on 2018/6/27.
  6. // Copyright © 2018年 L. All rights reserved.
  7. //
  8. #import "FUSlider.h"
  9. #import "FUDemoBarDefine.h"
  10. #import "UIImage+demobar.h"
  11. #import "UIColor+FUAPIDemoBar.h"
  12. @implementation FUSlider
  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:@"makeup_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]) {//makeup_dot
  39. [self setThumbImage:[UIImage imageWithName:@"makeup_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. self.maximumTrackTintColor = [UIColor whiteColor];
  54. }
  55. return self;
  56. }
  57. -(void)layoutSubviews {
  58. [super layoutSubviews];
  59. if (!middleView) {
  60. middleView = [[UIView alloc] initWithFrame:CGRectMake(2, self.frame.size.height /2.0 - 1, 100, 4)];
  61. middleView.backgroundColor = [UIColor colorWithHexColorString:@"5EC7FE"];
  62. middleView.hidden = YES;
  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. [self insertSubview:middleView atIndex: self.subviews.count - 2];
  73. line.frame = CGRectMake(self.frame.size.width / 2.0 - 1.0, 4.0, 2.0, self.frame.size.height - 8.0) ;
  74. CGFloat value = self.value ;
  75. [self setValue:value animated:NO];
  76. }
  77. -(void)setType:(FUSliderType)type {
  78. _type = type ;
  79. switch (_type) {
  80. case FUFilterSliderType101:{
  81. line.hidden = NO ;
  82. middleView.hidden = NO ;
  83. [self setMinimumTrackTintColor:[UIColor whiteColor]];
  84. }
  85. break;
  86. default:{
  87. line.hidden = YES ;
  88. middleView.hidden = YES ;
  89. [self setMinimumTrackTintColor:[UIColor colorWithHexColorString:@"5EC7FE"]];
  90. }
  91. break;
  92. }
  93. }
  94. // 后设置 value
  95. - (void)setValue:(float)value animated:(BOOL)animated {
  96. [super setValue:value animated:animated];
  97. switch (_type) {
  98. case FUFilterSliderType101:{
  99. tipLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100 - 50)];
  100. CGFloat currentValue = value - 0.5 ;
  101. CGFloat width = currentValue * (self.frame.size.width - 4);
  102. if (width < 0 ) {
  103. width = -width ;
  104. }
  105. CGFloat X = currentValue > 0 ? self.frame.size.width / 2.0 : self.frame.size.width / 2.0 - width ;
  106. CGRect frame = middleView.frame ;
  107. frame = CGRectMake(X, frame.origin.y, width, frame.size.height) ;
  108. middleView.frame = frame ;
  109. NSLog(@"----frame---%@",NSStringFromCGRect(frame));
  110. }
  111. break ;
  112. default:{
  113. tipLabel.text = [NSString stringWithFormat:@"%d",(int)(value * 100)];
  114. }
  115. break;
  116. }
  117. CGFloat x = value * (self.frame.size.width - 20) - tipLabel.frame.size.width * 0.5 + 10;
  118. CGRect frame = tipLabel.frame;
  119. frame.origin.x = x;
  120. bgImgView.frame = frame;
  121. tipLabel.frame = frame;
  122. tipLabel.hidden = !self.tracking;
  123. bgImgView.hidden = !self.tracking;
  124. }
  125. @end