// // GIGaQuestionSlider.m // GIGA // // Created by lianxiang on 2018/9/11. // Copyright © 2018年 com.giga.ios. All rights reserved. // #import "GIGaQuestionSlider.h" #import "UIColor+HexColor.h" #define thumbBound_x 10 #define thumbBound_y 20 @interface GIGaQuestionSlider() { CGRect _lastBounds; } @end @implementation GIGaQuestionSlider - (instancetype)initWithFrame:(CGRect)frame type:(GIGaQuestionSliderType)type { self = [super initWithFrame:frame]; if (self) { self.minimumValue = 0.0; self.maximumValue = 1.0; [self creatSubView:type]; } return self; } -(void)creatSubView:(GIGaQuestionSliderType)type{ [self thumbimageView]; switch (type) { case GIGaQuestionSliderTypeGray: { [self createUI]; } break; case GIGaQuestionSliderTypeGradient: { [self creatGradient]; } break; default: break; } } -(void)creatGradient{ self.minimumTrackTintColor=[UIColor clearColor]; self.maximumTrackTintColor=[UIColor clearColor]; NSArray *colorArr = @[(id)[[UIColor colorWithHex:0xFFFFFF] CGColor], (id)[[UIColor colorWithHex:0xFFF3E4] CGColor], (id)[[UIColor colorWithHex:0xFBC37B] CGColor]]; NSArray *colorLocationArray = @[@0.0, @0.5, @1.0]; CAGradientLayer * gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = self.bounds; gradientLayer.masksToBounds = YES; gradientLayer.cornerRadius = self.frame.size.height /2 ; gradientLayer.borderWidth = 1; gradientLayer.borderColor =GIGARGB(215, 215, 215, 1).CGColor; [gradientLayer setLocations:colorLocationArray]; [gradientLayer setColors:colorArr]; [gradientLayer setStartPoint:CGPointMake(0, 0)]; [gradientLayer setEndPoint:CGPointMake(1, 0)]; [self.layer addSublayer:gradientLayer]; } -(void)createUI{ self.minimumValue = 0.0; self.maximumValue = 1.0; // self.minimumTrackTintColor = GIGARGB(216,216, 216, 1); // self.maximumTrackTintColor = GIGARGB(216,216, 216, 1); self.minimumTrackTintColor = GIGAUIColorFromRGBA(0xEA4D4D); self.maximumTrackTintColor = GIGAUIColorFromRGBA(0xEA4D4D); } -(CGRect)trackRectForBounds:(CGRect)bounds { bounds.origin.x = bounds.origin.x; bounds.origin.y = bounds.origin.y; bounds.size.height = bounds.size.height; bounds.size.width = bounds.size.width; return bounds; } -(void)thumbimageView{ [self setThumbImage:[self OriginImage:[UIImage imageNamed:@"btn_slider_thumb"] scaleToSize:CGSizeMake(40, 40)] forState:UIControlStateNormal]; [self setThumbImage:[self OriginImage:[UIImage imageNamed:@"btn_slider_thumb"] scaleToSize:CGSizeMake(40, 40)] forState:UIControlStateHighlighted]; } -(UIImage*) OriginImage:(UIImage*)image scaleToSize:(CGSize)size { UIGraphicsBeginImageContext(size);//size为CGSize类型,即你所需要的图片尺寸 [image drawInRect:CGRectMake(0,0, size.width, size.height)]; UIImage* scaledImage =UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; } // 扩大thumb 触控区域 - (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value { rect.origin.x = rect.origin.x; rect.size.width = rect.size.width ; CGRect result = [super thumbRectForBounds:bounds trackRect:rect value:value]; _lastBounds = result; return result; } - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *result = [super hitTest:point withEvent:event]; if (point.x < 0 || point.x > self.bounds.size.width){ return result; } if ((point.y >= -thumbBound_y) && (point.y < _lastBounds.size.height + thumbBound_y)) { float value = 0.0; value = point.x - self.bounds.origin.x; value = value/self.bounds.size.width; value = value < 0? 0 : value; value = value > 1? 1: value; value = value * (self.maximumValue - self.minimumValue) + self.minimumValue; [self setValue:value animated:YES]; } return result; } - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ BOOL result = [super pointInside:point withEvent:event]; if (!result && point.y > -10) { if ((point.x >= _lastBounds.origin.x - thumbBound_x) && (point.x <= (_lastBounds.origin.x + _lastBounds.size.width + thumbBound_x)) && (point.y < (_lastBounds.size.height + thumbBound_y))) { result = YES; } } return result; } @end