近期做项目使用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);
}