根据传入的数据绘制圆环,以及以绘画形式自定义图片为圆形
2016-06-19 10:09
519 查看
</pre></p><p>昨天在家躺着正舒坦那,一哥们又找我了。</p><p>没错,是又。就是之前让我写个小DEMO参考一下圆环绘制的那个人。</p><p>好吧,这次是问我如何自定义绘制一个圆环用来展示数据的比例。</p><p>我当时很惊奇,这个你搜下就会有的还用来问我吗?</p><p>然后他告诉我,还有一个问题。将展示的图片设置为圆形。</p><p>而且是画图的形式来展示。</p><p>好吧。。</p><p>不是很明白为什么这么要求。。</p><p>不过既然没什么事就花了点时间帮他写了一个。。</p><p>详情看代码。。</p><p></p><pre name="code" class="objc">- (void)drawRect:(CGRect)rect {
//图片
UIImage *image = [UIImage imageNamed:@"天空-栏杆"];
//开启上下文
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0.0);
//获取画板
CGContextRef ref = UIGraphicsGetCurrentContext();
//结束时的角度
CGFloat end = M_PI *2;
//设置路径与线长、颜色,绘制方式为stroke,非填充
//此路径为图片外围路径
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:40 startAngle:0 endAngle:end clockwise:1];
path.lineWidth = 5;
[[UIColor greenColor]set];
[path stroke];
//path这个路径的end可以根据 传入比例*M_PI*2(360°乘比例), 来设置结束位置。来达到根据传入的数据绘制圆环显示比例大小的要求。
//设置图片要展示的大小的路径
UIBezierPath *path1 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:50 startAngle:0 endAngle:end clockwise:1];
//将路径添加到画板上
CGContextAddPath(ref, path1.CGPath);
//裁剪画板,只获取路径范围内的图形
CGContextClip(ref);
//设置图片画在画板的哪个位置上并开始绘画
[image drawAtPoint:CGPointMake(0, 0)];
//获取画好的图片
UIImage *image2 = UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
//通过imageView展示图片
UIImageView *img = [[UIImageView alloc]initWithImage:image2];
[self addSubview:img];
//展示的结果就是图片被画成了圆形,如果需要写到相册就是下面那一行
//将图片写到相册里
// UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil);
}
//图片
UIImage *image = [UIImage imageNamed:@"天空-栏杆"];
//开启上下文
UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0.0);
//获取画板
CGContextRef ref = UIGraphicsGetCurrentContext();
//结束时的角度
CGFloat end = M_PI *2;
//设置路径与线长、颜色,绘制方式为stroke,非填充
//此路径为图片外围路径
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:40 startAngle:0 endAngle:end clockwise:1];
path.lineWidth = 5;
[[UIColor greenColor]set];
[path stroke];
//path这个路径的end可以根据 传入比例*M_PI*2(360°乘比例), 来设置结束位置。来达到根据传入的数据绘制圆环显示比例大小的要求。
//设置图片要展示的大小的路径
UIBezierPath *path1 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:50 startAngle:0 endAngle:end clockwise:1];
//将路径添加到画板上
CGContextAddPath(ref, path1.CGPath);
//裁剪画板,只获取路径范围内的图形
CGContextClip(ref);
//设置图片画在画板的哪个位置上并开始绘画
[image drawAtPoint:CGPointMake(0, 0)];
//获取画好的图片
UIImage *image2 = UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文
UIGraphicsEndImageContext();
//通过imageView展示图片
UIImageView *img = [[UIImageView alloc]initWithImage:image2];
[self addSubview:img];
//展示的结果就是图片被画成了圆形,如果需要写到相册就是下面那一行
//将图片写到相册里
// UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil);
}
相关文章推荐
- [caffe]深度学习之图像分类模型AlexNet解读
- Linux 系统应用编程——网络编程(利用TCP/IP 模型分析数据传输过程)
- 沈阳航空软件工程附加
- [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
- 174. Dungeon Game
- 增量更新:bsdiff工具的安装和使用
- 上班之前的“踩点”--一个程序员的成长史(9)
- 【Ionic实战】自动升级Android APP
- linux dup函数源码剖析
- jstree的使用
- Arduino 卡片8震动探测
- Linux 系统应用编程——网络编程(TCP/IP 数据包格式解析)
- 附加作业
- 简单总结线性表
- shell_sed_awk使用
- Velocity
- Linux 系统应用编程——网络编程(I/O模型)
- C++ - PAT - 1020. 月饼 (25)(贪心算法)
- linux下开启日志查询
- Java中路径\、/和\\问题