怎么给Slider添加刻度尺

由于项目需求需要在一个滑杆,而且要求在滑杆上有刻度的显示。首先想到的是用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);

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容