自定义滑动获取验证码控件

CheckCodeSliderView.h文件

@interface CheckCodeSlider : UISlider

@end

@interface CheckCodeSliderView : UIView

-(void)showCheckCodeSlider;

@property (nonatomic,copy) void (^hideCheckViewBlock)(void);

@end

 

CheckCodeSliderView.m文件

#import "CheckCodeSliderView.h"

#define SliderLabelTextColor [UIColor colorWithRed:42/255.0 green:42/255.0 blue:42/255.0 alpha:1]
#define SliderLabelBorderColor [UIColor colorWithRed:193/255.0 green:193/255.0 blue:193/255.0 alpha:1].CGColor
#define SliderMinimumTrackTintColor [UIColor colorWithRed:122/255.0 green:194/255.0 blue:60/255.0 alpha:1]
#define SliderLabelFont 14
#define SliderLabelText @"请按住滑块,拖到最右边获取验证码"
#define ThumbImageWidth 50
#define ThumbImageHeight 40

@implementation CheckCodeSlider

//覆写父类UISlider的方法改变滑条frame
- (CGRect)trackRectForBounds:(CGRect)bounds{
    
    return CGRectMake(0, 0, bounds.size.width, bounds.size.height);
}

@end

@interface CheckCodeSliderView (){
    
    UIImageView *imgView;
}
@property (nonatomic ,strong)CheckCodeSlider *slider;
@property (nonatomic ,strong)UILabel *label;
@property (nonatomic ,assign)CGFloat sliderRectWidth;
@property (nonatomic ,assign)CGFloat sliderRectHeight;
@end

@implementation CheckCodeSliderView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        
        _sliderRectWidth = frame.size.width;
        _sliderRectHeight = frame.size.height;
        
        [self createSlider];
        
    }
    return self;
}
- (void)createSlider{
    
    _slider = [[CheckCodeSlider alloc]initWithFrame:CGRectMake(0, 0, _sliderRectWidth,_sliderRectHeight)];
    _slider.minimumTrackTintColor = [UIColor clearColor];
    _slider.maximumTrackTintColor = [UIColor colorWithRed:239 / 255.0 green:228 / 255.0 blue:222 / 255.0 alpha:1.0];
    _slider.layer.masksToBounds = YES;
    _slider.layer.cornerRadius = 18.0f;
    [_slider setThumbImage:[UIImage imageNamed:@"s-sliderBtn"] forState:UIControlStateNormal];
    [_slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self addSubview:_slider];
    
    _label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, _sliderRectWidth,_sliderRectHeight)];
//    _label.center = self.center;
    _label.text = SliderLabelText;
    _label.font = [UIFont systemFontOfSize:SliderLabelFont];
    _label.textAlignment = NSTextAlignmentCenter;
    _label.textColor = SliderLabelTextColor;
    _label.layer.masksToBounds = YES;
    _label.layer.cornerRadius = _sliderRectHeight/2;
    _label.layer.borderWidth = 1;
    _label.layer.borderColor = SliderLabelBorderColor;
    [self addSubview:_label];
    
    //这里创建了一个跟滑块相同的imageview覆盖在文字上面,并在sliderValueChanged方法中让其跟着滑块滑动。
    
    imgView = [[UIImageView alloc]initWithFrame:CGRectMake(_slider.frame.origin.x, _slider.frame.origin.y, ThumbImageWidth, ThumbImageHeight)];
    imgView.image = [UIImage imageNamed:@"s-sliderBtn"];
    [self addSubview:imgView];
}

- (void)sliderValueChanged:(UISlider *)slider
{
    [_slider setValue:slider.value animated:NO];
    if (slider.value >0) {
        _slider.minimumTrackTintColor = SliderMinimumTrackTintColor;
    }else{
        _slider.minimumTrackTintColor = [UIColor clearColor];
    }
    
    imgView.frame = CGRectMake(_slider.frame.origin.x+slider.value*(_sliderRectWidth-ThumbImageWidth), _slider.frame.origin.y, ThumbImageWidth, ThumbImageHeight);
    
    if (!slider.isTracking && slider.value != 1) {
        [_slider setValue:0 animated:YES];
        if (slider.value >0) {
            _slider.minimumTrackTintColor = SliderMinimumTrackTintColor;
        }else{
            _slider.minimumTrackTintColor = [UIColor clearColor];
        }
        imgView.frame = CGRectMake(_slider.frame.origin.x, _slider.frame.origin.y, ThumbImageWidth, ThumbImageHeight);
    }
    else if (slider.isTracking && slider.value == 1)
    {
        imgView.image = [UIImage imageNamed:@"s-sliderSuccess"];
    }
    else if(!slider.isTracking && slider.value == 1)
    {
        self.hideCheckViewBlock();
    }
}
-(void)showCheckCodeSlider
{
        self.hidden = NO;
        imgView.image = [UIImage imageNamed:@"s-sliderBtn"];
        _slider.minimumTrackTintColor = [UIColor clearColor];
        [_slider setValue:0 animated:YES];
        imgView.frame = CGRectMake(_slider.frame.origin.x, _slider.frame.origin.y, ThumbImageWidth, ThumbImageHeight);
}
@end

 

使用:

#import "CheckCodeSliderView.h"

@property(nonatomic,strong) CheckCodeSliderView *checkCodeView;

//创建滑块
    _checkCodeView = [[CheckCodeSliderView alloc]initWithFrame:CGRectMake(20, SCREEN_HEIGHT/2, SCREEN_WIDTH-40, 40)];
    _checkCodeView.backgroundColor = [UIColor colorWithRed:150/255.0 green:170/255.0 blue:189/255.0 alpha:1];
    WS(ws);
    [_checkCodeView setHideCheckViewBlock:^{
        
       ws.checkCodeView.hidden = YES;
        //其它操作可以写在这里
    }];
    [self.view addSubview:_checkCodeView];

posted @ 2018-04-10 16:13  锦夏ing  阅读(387)  评论(0)    收藏  举报