
废话不说,直接上代码
@interface xx : UIView
@property (nonatomic,assign) NSInteger toNum;
@property (nonatomic,assign) NSInteger fromNum;
- (void)refreshView:(NSInteger)from to:(NSInteger)to;
@end
@interface xx()
@property (nonatomic, strong)UIView *progressView;
@property (nonatomic, strong)UIImageView *leftHandImageView;
@property (nonatomic, strong)UIImageView *rightHandImageView;
@property (nonatomic, strong)NSMutableArray *lineArray;
@property (nonatomic, assign)CGFloat space;
@end
@implementation xx
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor whiteColor];
[self createSubviews];
}
return self;
}
- (void)createSubviews {
CGFloat width = self.frame.size.width;
CGFloat lineWidth = 1;
self.space = (width - lineWidth * 23) * 1.0 / 22;
UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 35, width, 4)];
lineView.backgroundColor = [UIColor grayColor];
[self addSubview:lineView];
self.lineArray = [NSMutableArray array];
for (NSInteger i=0; i <= 110; i+=5) {
UIView *spaceView = [[UIView alloc] init];
spaceView.backgroundColor = [UIColor redColor];
[self addSubview:spaceView];
[spaceView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(i/5*(self.space+lineWidth));
make.width.mas_equalTo(lineWidth);
make.height.mas_equalTo(4);
make.bottom.equalTo(lineView.mas_top).offset(-2);
}];
if (i%2 != 0) {
spaceView.hidden = YES;
}
[self.lineArray addObject:spaceView];
if (i >= 10 && i <=100 && i%2 == 0) {
UILabel *label = UILabel.new;
label.text = @(i).stringValue;
label.textAlignment = NSTextAlignmentCenter;
label.font = [UIFont systemFontOfSize:10];
label.textColor = UIColor.orangeColor;
[self addSubview:label];
[label mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(spaceView.mas_centerX);
make.bottom.equalTo(spaceView.mas_top).offset(-4);
}];
}
}
[self layoutIfNeeded];
UIView *firstView = self.lineArray.firstObject;
UIView *lastView = self.lineArray.lastObject;
[self addSubview:self.progressView];
[self addSubview:self.leftHandImageView];
[self addSubview:self.rightHandImageView];
self.leftHandImageView.frame = CGRectMake(0, lineView.frame.origin.y+lineView.frame.size.height+6, 18, 22);
self.leftHandImageView.center = CGPointMake(firstView.center.x, self.leftHandImageView.center.y);
self.rightHandImageView.frame = CGRectMake(0, lineView.frame.origin.y+lineView.frame.size.height+6, 18, 22);
self.rightHandImageView.center = CGPointMake(lastView.center.x, self.rightHandImageView.center.y);
self.progressView.frame = CGRectMake(0, 0, 100, 4);
self.progressView.center = CGPointMake(self.progressView.center.x, lineView.center.y);
CGRect progressRect = CGRectMake(self.leftHandImageView.center.x, self.progressView.frame.origin.y, self.rightHandImageView.center.x - self.leftHandImageView.center.x, 4);
self.progressView.frame = progressRect;
self.fromNum = 0;
self.toNum = 110;
}
- (void)refreshView:(NSInteger)from to:(NSInteger)to {
self.fromNum = from;
self.toNum = to;
UIView *firstView = [self getLine:from];
UIView *lastView = [self getLine:to];
self.leftHandImageView.center = CGPointMake(firstView.center.x, self.leftHandImageView.center.y);
self.rightHandImageView.center = CGPointMake(lastView.center.x, self.rightHandImageView.center.y);
CGRect progressRect = CGRectMake(self.leftHandImageView.center.x, self.progressView.frame.origin.y, self.rightHandImageView.center.x - self.leftHandImageView.center.x, 4);
self.progressView.frame = progressRect;
}
-(void)leftHandMove:(UIPanGestureRecognizer *)pan{
UIView *firstView = self.lineArray.firstObject;
UIView *lastView = self.lineArray.lastObject;
CGPoint point = [pan translationInView:self.leftHandImageView];
CGFloat x = self.leftHandImageView.center.x + point.x;
if(x > lastView.frame.origin.x + lastView.frame.size.width){
x = lastView.frame.origin.x + lastView.frame.size.width;
}else if (x < firstView.frame.origin.x){
x = firstView.frame.origin.x;
}
if (self.rightHandImageView.center.x - x <= self.space) {
x = self.rightHandImageView.center.x - self.space;
}
self.leftHandImageView.center = CGPointMake(ceilf(x), self.leftHandImageView.center.y);
[pan setTranslation:CGPointZero inView:self];
if (pan.state == UIGestureRecognizerStateEnded) {
[self changeHandImageViewCenter:self.leftHandImageView point:ceilf(x)];
}
CGRect progressRect = CGRectMake(self.leftHandImageView.center.x, self.progressView.frame.origin.y, self.rightHandImageView.center.x - self.leftHandImageView.center.x, 4);
self.progressView.frame = progressRect;
}
-(void)rightHandMove:(UIPanGestureRecognizer *)pan{
UIView *firstView = self.lineArray.firstObject;
UIView *lastView = self.lineArray.lastObject;
CGPoint point = [pan translationInView:self.rightHandImageView];
CGFloat x = self.rightHandImageView.center.x + point.x;
if(x > lastView.frame.origin.x + lastView.frame.size.width){
x = lastView.frame.origin.x + lastView.frame.size.width;
}else if (x < firstView.frame.origin.x){
x = firstView.frame.origin.x;
}
if (x - self.leftHandImageView.center.x <= self.space) {
x = self.leftHandImageView.center.x + self.space;
}
self.rightHandImageView.center = CGPointMake(ceilf(x), self.rightHandImageView.center.y);
[pan setTranslation:CGPointZero inView:self];
if (pan.state == UIGestureRecognizerStateEnded) {
[self changeHandImageViewCenter:self.rightHandImageView point:ceilf(x)];
}
CGRect progressRect = CGRectMake(self.leftHandImageView.center.x, self.progressView.frame.origin.y, self.rightHandImageView.center.x - self.leftHandImageView.center.x, 4);
self.progressView.frame = progressRect;
}
- (void)changeHandImageViewCenter:(UIView *)handView point:(CGFloat)x {
UIView *beforeView = self.lineArray.firstObject;
for (UIView *lineView in self.lineArray) {
if (x >= beforeView.frame.origin.x &&
x <= lineView.frame.origin.x) {
UIView *centerView = beforeView;
if (lineView.frame.origin.x - x < x - beforeView.frame.origin.x) {
if (handView == self.leftHandImageView) {
if (lineView.center.x < self.rightHandImageView.center.x) {
centerView = lineView;
}
} else {
if (lineView.center.x > self.leftHandImageView.center.x) {
centerView = lineView;
}
}
}
handView.center = CGPointMake(centerView.center.x, handView.center.y);
if (handView == self.leftHandImageView) {
self.fromNum = [self getNumber:centerView];
} else {
self.toNum = [self getNumber:centerView];
}
break;
}
beforeView = lineView;
}
}
- (NSInteger)getNumber:(UIView *)lineV {
return 5 * [self.lineArray indexOfObject:lineV];
}
- (UIView *)getLine:(NSInteger)number {
return [self.lineArray objectAtIndex:number/5];
}
#pragma mark - lz
- (UIView *)progressView {
if (!_progressView) {
_progressView = [UIView new];
_progressView.backgroundColor = UIColor.blueColor;
UIView *leftView = [UIView new];
leftView.backgroundColor = UIColor.blueColor;
[_progressView addSubview:leftView];
UIView *rightView = [UIView new];
rightView.backgroundColor = UIColor.blueColor;
[_progressView addSubview:rightView];
[leftView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(2);
make.height.mas_equalTo(8);
make.left.equalTo(_progressView.mas_left);
make.centerY.equalTo(_progressView.mas_centerY);
}];
[rightView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(2);
make.height.mas_equalTo(8);
make.right.equalTo(_progressView.mas_right);
make.centerY.equalTo(_progressView.mas_centerY);
}];
}
return _progressView;
}
- (UIImageView *)leftHandImageView {
if (!_leftHandImageView) {
_leftHandImageView = [[UIImageView alloc] init];
[_leftHandImageView setImage:[UIImage imageNamed:@"xx"]];
UIPanGestureRecognizer *leftPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(leftHandMove:)];
[leftPanRecognizer setMinimumNumberOfTouches:1];
[leftPanRecognizer setMaximumNumberOfTouches:1];
[_leftHandImageView setUserInteractionEnabled:YES];
[_leftHandImageView addGestureRecognizer:leftPanRecognizer];
}
return _leftHandImageView;
}
- (UIImageView *)rightHandImageView {
if (!_rightHandImageView) {
_rightHandImageView = [[UIImageView alloc] init];
[_rightHandImageView setImage:[UIImage imageNamed:@"xx"]];
UIPanGestureRecognizer *rightPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(rightHandMove:)];
[rightPanRecognizer setMinimumNumberOfTouches:1];
[rightPanRecognizer setMaximumNumberOfTouches:1];
[_rightHandImageView setUserInteractionEnabled:YES];
[_rightHandImageView addGestureRecognizer:rightPanRecognizer];
}
return _rightHandImageView;
}
@end
网友评论