iOS开发——仪表盘的制作

从事iOS开发时间也不短了,可是却没有自己的博客,实在是惭愧。自己下定决心要坚持写自己的博客,提高自己,也能跟大家有更多的交流。今天来跟大家分享一下仪表盘的制作,希望对大家有所帮助。

  废话不多说直接上代码

 1 //表盘支持的最小体温数值
 2 static CGFloat MIN_VALUE = 34;
 3 //表盘支持的最大体温数值
 4 static CGFloat MAX_VALUE = 43;
 5 @implementation WQMeasureDashboardView
 6 - (void)drawRect:(CGRect)rect {
 7     //
 8     UIImage *imageBg = [UIImage imageNamed:@"bg_measure_dashboard"];
 9     [imageBg drawInRect:rect];
10     
11     UIImage *imageMask = [self getMeasureMaskImage:rect];
12     [imageMask drawInRect:rect];
13     
14     int viewW = rect.size.width;
15     int viewH = rect.size.height;
16     //绘制文本
17     int textW = 55;
18     int textH = 25;
19     
20     int textX = (viewW-textW)*0.5;
21     int textY = (viewH-textH)*0.5;
22     
23     NSString *valueStr = [NSString stringWithFormat:@"%.2f",self.value];
24     NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName:[UIColor blackColor]};
25     [valueStr drawInRect:CGRectMake(textX, textY,textW,textH) withAttributes:dic];
26 }
27 -(UIImage *)getMeasureMaskImage:(CGRect) rect{
28     //绘制表盘
29     UIImage *imageDash = [UIImage imageNamed:@"bg_measure_dashboard_mask"];
30     
31     int viewW = rect.size.width;
32     int viewH = rect.size.height;
33     
34     CGFloat centerX = viewW*1.0/2.0;
35     CGFloat centerY = viewH*1.0/2.0;
36     
37     //裁剪图片,通过绘制扇形进行裁剪
38     UIGraphicsBeginImageContextWithOptions(rect.size,NO,0);
39     [[UIColor redColor]set];
40     CGContextRef context = UIGraphicsGetCurrentContext();
41     
42     CGContextSetLineWidth(context, 2);
43     CGContextMoveToPoint(context, centerX, centerY);
44     float startAngle =[self getStartAngle];
45     float endAngle = M_PI*5/2.0;
46     CGContextAddArc(context, centerX, centerY, centerX,startAngle ,endAngle, 0);
47     CGContextClosePath(context);
48     CGContextClip(context);
49     [imageDash drawInRect:rect];
50     
51     //获取裁剪后的图片
52     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
53     
54     UIGraphicsEndImageContext();
55     return newImage;
56 }
57 #pragma 获取裁剪图片的开始角度
58 -(CGFloat)getStartAngle{
59     float currentValue = _value;
60     if (currentValue<=MIN_VALUE) {
61         currentValue = MIN_VALUE;
62     }
63     if (currentValue >= MAX_VALUE) {
64         currentValue = MAX_VALUE;
65     }
66     //由于整个表盘被分成了9等份,所以每一份对应的角度是40度
67     float angle = M_PI/2.0+M_PI*ABS(currentValue-MIN_VALUE)*(40.0/180.0);
68     return angle;
69 }
70 -(void)setValue:(float)value{
71     _value = value;
72     [self setNeedsDisplay];
73 }

 

转载于:https://www.cnblogs.com/qinxiaoguang/p/5441536.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值