由于项目需求需要在一个滑杆,而且要求在滑杆上有刻度的显示。首先想到的是用UISlider来实现。
由于UISlider上没有刻度。故需要我们自己去添加。
我们自己添加就需要继承UISlider。然后再- (void)drawRect:(CGRect)rect方法里面进行重绘。
绘制刻度线代码如下:
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0);// 基于位图去创建一个尺寸大小为rect.size大小的上下文。参数说明。rect.size就是尺寸大小。第二个参数透明度开关如果图形完全不用透明,设置yes以优化位图的存储。第三个参数缩放因子 一般设置为0会自动根据手机屏幕去适配
CGContextRef contenxt = UIGraphicsGetCurrentContext();设置上下文
for(inti =0; i<self.markPositions.count; i++) { // 此处的数组表示的是需要添加刻度数
CGContextSetLineWidth(contenxt,self.markWidth);// 设置线条的宽度
CGFloat postion = (i+1) * rect.size.width/ (self.markPositions.count+1);//计算出每个刻度的其实x的位置
if((i+1)%2==0) {// 由于要做高低不同的刻度线 故在次添加判断
CGContextMoveToPoint(contenxt,postion,rect.size.height/2);// 刻度的起点
CGContextAddLineToPoint(contenxt, postion, rect.size.height/2+self.barHeight/2-1);刻度的终点
}else{
CGContextMoveToPoint(contenxt,postion,rect.size.height/2+5);
CGContextAddLineToPoint(contenxt, postion, rect.size.height/2+self.barHeight/2-1);
}
CGContextSetStrokeColorWithColor(contenxt, self.markColor.CGColor);// 绘制刻度的颜色
CGContextStrokePath(contenxt);//开始绘制
}
以上就我在UISlider添加刻度尺的全部代码。
补充。在我们使用UISlider的时候 有时候会出现滑块不能滑动到边上。我们需要在继承UISlider的类里面添加一下代码
- (CGRect)trackRectForBounds:(CGRect)bounds
{
return CGRectMake(0, 0, CGRectGetWidth(self.frame), self.barHeight);
}
-(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);
}