由于項目需求需要在一個滑桿蜕乡,而且要求在滑桿上有刻度的顯示牺氨。首先想到的是用UISlider來實現(xiàn)锁施。
由于UISlider上沒有刻度。故需要我們自己去添加咐低。
我們自己添加就需要繼承UISlider揽思。然后再- (void)drawRect:(CGRect)rect方法里面進行重繪。
繪制刻度線代碼如下:
?UIGraphicsBeginImageContextWithOptions(rect.size, false, 0);// 基于位圖去創(chuàng)建一個尺寸大小為rect.size大小的上下文见擦。參數(shù)說明钉汗。rect.size就是尺寸大小。第二個參數(shù)透明度開關如果圖形完全不用透明锡宋,設置yes以優(yōu)化位圖的存儲儡湾。第三個參數(shù)縮放因子 一般設置為0會自動根據手機屏幕去適配
CGContextRef contenxt = UIGraphicsGetCurrentContext();設置上下文
for(inti =0; i<self.markPositions.count; i++) {? ? ? ? ?// 此處的數(shù)組表示的是需要添加刻度數(shù)
? ? ? ? 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的時候 有時候會出現(xiàn)滑塊不能滑動到邊上徐钠。我們需要在繼承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);
}