iOS的UISlider两端有间隙以及使用方法

    近期做项目使用UISlider时,我们需要做如下一个slider:

   

    相关代码:

//MARK:添加重量滑杆
- (void)addSlider
{
    //自定义UISlider的样式和滑块
    
    
    
    //轨道图片
    
    UIImage *stetchLeftTrack = [UIImage imageNamed:@"kg轴左"];//thick
    
    UIImage *stetchRightTrack = [UIImage imageNamed:@"kg轴右"];
    
    
    
    //滑块图片
    
    UIImage *thumbImage = [UIImage imageNamed:@"kgball"];
    
    
    
    //创建slider
    
    self.weightSlider = [[JLSSlider alloc] initWithFrame:CGRectMake(ScreenWidth/2.0-150, 98, 300, 10)];
    
    self.weightSlider.backgroundColor = [UIColor clearColor];
    
//    slider.value = 1;
    
    self.weightSlider.minimumValue = 1;
    
    self.weightSlider.maximumValue = 30;
    
    
    
    //设置轨道的图片
    
    [self.weightSlider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];

    [self.weightSlider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];
    
    
    
    //设置滑块的图片
    
    //[slider setThumbImage:thumbImage forState:UIControlStateHighlighted];
    
    [self.weightSlider setThumbImage:thumbImage forState:UIControlStateNormal];
    
    
    
    //滑动滑块添加事件
    
    //滑动过程中不断触发事件
    
    [self.weightSlider addTarget:self action:@selector(onThumb:) forControlEvents:UIControlEventValueChanged];
    
    //滑动完成添加事件
    
    //滑动完成后触发事件
    
    [self.weightSlider addTarget:self action:@selector(endThumb:) forControlEvents:UIControlEventTouchUpInside];
    
    
    
    [self.weightBG addSubview:self.weightSlider];
}
//MARK:滑杆事件
- (void)onThumb:(UISlider *)sender
{
    self.weightNum.text = [NSString stringWithFormat:@"%0.0f公斤",sender.value];
    NSLog(@"%f",sender.value);
}
- (void)endThumb:(UISlider *)sender
{
    self.weightNum.text = [NSString stringWithFormat:@"%0.0f公斤",sender.value];
    NSLog(@"======%f",sender.value);

}

后来测试发现一个问题,在slider值为1kg和30kg时,均露着蓝色的空隙。间隙结局的方法就是重写UISlider的类,重写以下方法:

//UISlider 两边有间隙解决方法
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value{
    
    rect.origin.x = rect.origin.x - 10 ;
    
    rect.size.width = rect.size.width +20;
    
    return CGRectInset ([super thumbRectForBounds:bounds trackRect:rect value:value], 10 , 10);
    
}


猜你喜欢

转载自blog.csdn.net/zhonglv_honeymoon/article/details/79792385