网上有很多关于自定义UISlider的文章,但是很多代码的兼容性都很差,尤其是在重写:trackRectForBounds和thumbRectForBounds这两个方法的重写,下面说一下如何在自定义时:
1.如何设置滑道的高度?
2.如何解决自定义滑块图片以后解决滑块两端出现无法滚动到最左边、最后边的问题,或者滑块滑动到最左边、最后边都出现被盖住的问题。
代码如下:
-(CGRect)trackRectForBounds:(CGRect)bounds
{
//修改滑动条的高度
bounds.size.height=self.progressHeight;
self.layer.cornerRadius = self.progressHeight/2;
bounds.origin.y = (self.frame.size.height-bounds.size.height)/2;
return bounds;
}
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
{
//调整滑块范围
CGFloat size = self.currentThumbImage.size.width/kScale;
//滑动按钮一半的宽度
CGFloat halfWidth = size/2;
rect.origin.x += halfWidth;
rect.size.width -= halfWidth*2;
bounds = [super thumbRectForBounds:bounds trackRect:rect value:value];
return CGRectInset(bounds, halfWidth, halfWidth);
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if (self.isLimitSlide) {
//拦截滑动处理
return NO;
}else{
return YES;
}
}
网络上绝大部分资料在重写thumbRectForBounds时,都是固定一个值来调整滑块的位置,这里是通过滑块的宽度,自动调节左间距,所以通用性比较强。kScale是当前屏幕的scale。