You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.3 KiB
152 lines
5.3 KiB
// |
|
// TFSliderView.m |
|
// TFReader |
|
// |
|
// Created by 谢腾飞 on 2020/12/25. |
|
// Copyright © 2020 xtfei_2011@126.com. All rights reserved. |
|
// |
|
|
|
#import "TFSliderView.h" |
|
#import <TTRangeSlider/TTRangeSlider.h> |
|
|
|
#define point_Height 4 |
|
#define ThumbImage_Height 20 |
|
|
|
@interface TFSliderView () |
|
|
|
@property (nonatomic ,strong) TTRangeSlider *rangeSlider; |
|
@property (nonatomic ,assign) NSUInteger cutPointCout; |
|
@property (nonatomic ,strong) UIImageView *leftIconView; |
|
@property (nonatomic ,strong) UIImageView *rightIconView; |
|
|
|
@end |
|
|
|
@implementation TFSliderView |
|
|
|
- (instancetype)initWithFrame:(CGRect)frame sliderCutPointCount:(NSUInteger)cutPointCount |
|
{ |
|
if (self = [super initWithFrame:frame]) { |
|
|
|
self.cutPointCout = cutPointCount; |
|
[self createSubViews]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)createSubViews |
|
{ |
|
self.leftIconView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.height)]; |
|
self.leftIconView.bounds = CGRectMake(0, 0, CGRectGetWidth(self.leftIconView.frame) + 5, CGRectGetHeight(self.leftIconView.frame) + 5); |
|
[self addSubview:self.leftIconView]; |
|
|
|
self.rangeSlider = [[TTRangeSlider alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width - 2 * self.bounds.size.height, 10)]; |
|
self.rangeSlider.center = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2); |
|
self.rangeSlider.handleImage = [UIImage imageNamed:@"book_menu_slider_icon"]; |
|
self.rangeSlider.minValue = CGFLOAT_MIN; |
|
self.rangeSlider.maxValue = self.cutPointCout <= 0 ? 10 : self.cutPointCout; |
|
self.rangeSlider.selectedMinimum = CGFLOAT_MIN; |
|
self.rangeSlider.selectedMaximum = self.cutPointCout <= 0 ? 10 : self.cutPointCout; |
|
self.rangeSlider.hideLabels = YES; |
|
self.rangeSlider.disableRange = YES; |
|
self.rangeSlider.enableStep = NO; |
|
self.rangeSlider.step = 1; |
|
self.rangeSlider.handleDiameter = 20; |
|
self.rangeSlider.lineHeight = 5; |
|
self.rangeSlider.selectedHandleDiameterMultiplier = 1.2; |
|
self.rangeSlider.lineBackGroundColor = kGrayLineColor; |
|
self.rangeSlider.tintColorBetweenHandles = kMainColor; |
|
[self.rangeSlider addTarget:self action:@selector(sliderEndChanged:) forControlEvents:UIControlEventValueChanged]; |
|
[self addSubview:self.rangeSlider]; |
|
|
|
self.rightIconView = [[UIImageView alloc] initWithFrame:CGRectMake(self.bounds.size.width - self.bounds.size.height, 0, self.bounds.size.height, self.bounds.size.height)]; |
|
[self addSubview:self.rightIconView]; |
|
} |
|
|
|
- (void)sliderEndChanged:(TTRangeSlider *)sender |
|
{ |
|
if ([self.delegate respondsToSelector:@selector(sliderValueEndChanged:slider:)]) { |
|
[self.delegate sliderValueEndChanged:_invertedValue ? fabs(sender.selectedMaximum - self.cutPointCout):sender.selectedMaximum slider:self]; |
|
} |
|
} |
|
|
|
- (void)slider:(UISlider *)sender |
|
{ |
|
sender.value = (int)roundf(sender.value); |
|
} |
|
|
|
- (void)setStepSlider:(BOOL)stepSlider |
|
{ |
|
if (stepSlider) { |
|
|
|
self.rangeSlider.tintColorBetweenHandles = [UIColor clearColor]; |
|
self.rangeSlider.lineBackGroundColor = [UIColor clearColor]; |
|
self.rangeSlider.enableStep = YES; |
|
|
|
NSUInteger buttonNum = self.cutPointCout + 1; // 每行多少按钮 |
|
CGFloat button_W = point_Height; // 按钮宽 |
|
CGFloat button_H = point_Height; // 按钮高 |
|
CGFloat margin_X = ThumbImage_Height / 2; // 第一个按钮的X坐标 |
|
CGFloat margin_Y = (self.rangeSlider.height - point_Height) / 2; // 第一个按钮的Y坐标 |
|
CGFloat space_X = (self.rangeSlider.width - (3 * margin_X) - point_Height * (self.cutPointCout + 1)) / self.cutPointCout; // 按钮间距 |
|
for (NSUInteger i = 0; i < self.cutPointCout + 1; i++) { |
|
NSUInteger row = i / buttonNum; // 行号 |
|
NSUInteger loc = i % buttonNum; // 列号 |
|
CGFloat button_X = margin_X + (space_X + button_W) * loc; |
|
CGFloat button_Y = margin_Y + button_H * row; |
|
|
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(button_X, button_Y, button_W, button_H)]; |
|
view.backgroundColor = [UIColor blackColor]; |
|
view.layer.cornerRadius = point_Height / 2; |
|
view.clipsToBounds = YES; |
|
[self.rangeSlider addSubview:view]; |
|
[self.rangeSlider sendSubviewToBack:view]; |
|
} |
|
} |
|
} |
|
|
|
- (void)setMinimumTintColor:(UIColor *)minimumTintColor |
|
{ |
|
self.rangeSlider.tintColorBetweenHandles = minimumTintColor; |
|
} |
|
|
|
- (void)setMaximumTintColor:(UIColor *)maximumTintColor |
|
{ |
|
self.rangeSlider.tintColorBetweenHandles = maximumTintColor; |
|
} |
|
|
|
- (void)setLeftImage:(UIImage *)leftImage |
|
{ |
|
self.leftIconView.image = leftImage; |
|
} |
|
|
|
- (void)setLeftImageName:(NSString *)leftImageName |
|
{ |
|
self.leftIconView.image = [UIImage imageNamed:leftImageName]; |
|
} |
|
|
|
- (void)setRightImage:(UIImage *)rightImage |
|
{ |
|
self.rightIconView.image = rightImage; |
|
} |
|
|
|
- (void)setRightImageName:(NSString *)rightImageName |
|
{ |
|
self.rightIconView.image = [UIImage imageNamed:rightImageName]; |
|
} |
|
|
|
- (void)setMinimumValue:(CGFloat)minimumValue |
|
{ |
|
self.rangeSlider.minValue = minimumValue; |
|
} |
|
|
|
- (void)setMaximumValue:(CGFloat)maximumValue |
|
{ |
|
self.rangeSlider.maxValue = maximumValue; |
|
} |
|
|
|
- (void)setSliderValue:(CGFloat)sliderValue |
|
{ |
|
self.rangeSlider.selectedMaximum = sliderValue; |
|
} |
|
|
|
@end
|
|
|