UIKit和Core Graphics绘图——绘制虚线,椭圆以及饼图

用Point+Graphics画虚线 NULL 博文链接:https://hjy2099.iteye.com/blog/342056 立即下载

绘制虚线


虚线绘制主要调用CGContextSetLineDash函数。
这个函数有4个参数,除了一个是上下文外,phase为初始跳过几个点开始绘制,第三个参数为一个CGFloat数组,指定你绘制的样式,绘几个点跳几个点(下面为绘10个点,跳过5个),最后一个参数是上个参数数组元素的个数。

- (void)drawLineDash
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetLineWidth(context, 2.0f);
    CGContextSetLineDash(context, 0, (CGFloat[]){10, 5}, 2);//绘制10个跳过5个
    CGContextSetStrokeColorWithColor(context, [[UIColor brownColor] CGColor]);
    CGContextMoveToPoint(context, 0, 20);
    CGContextAddLineToPoint(context, 320, 20);
    CGContextStrokePath(context);
    CGContextRestoreGState(context);
}

效果如下:




绘制椭圆与圆


CGContextAddEllipseInRect函数
函数比较简单,只需要上下文和一个矩形参数。默认系统会绘制填充这个矩形内部的最大椭圆,若矩形为正方形,则为圆。

- (void)drawEllipse
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextAddEllipseInRect(context, CGRectMake(40, 180, 240, 120));
    CGContextSetLineWidth(context, 3.0f);
    CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]);
    CGContextStrokePath(context);
    CGContextRestoreGState(context);
}

效果




绘制弧,饼图(Pie Chart)


CGContextAddArc函数是一个画弧的函数,使用并不难,与其他一样,按照参数要求给其赋值就可以了,而且这个函数也十分好用,可以借助其实现绘制扇形,绘制饼图。
简单的看下这个函数
void CGContextAddArc (
CGContextRef c,
CGFloat x, 圆心点坐标的x和y
CGFloat y,
CGFloat radius, 半径
CGFloat startAngle, 绘制起始点的弧度值,一般在IOS绘图里都使用弧度这个概念
CGFloat endAngle,绘制终点的弧度值
int clockwise 1为顺时针,0为逆时针。
);

首先为了方便,我写了一个绘制饼图各个部分的函数。

void drawPieChart(CGContextRef context, CGPoint point, float start_angel, float end_angle, double radius, CGColorRef color)
{
    CGContextMoveToPoint(context, point.x, point.y);
    CGContextSetFillColorWithColor(context, color);
    CGContextAddArc(context, point.x, point.y, radius, start_angel, end_angle, 0);
    CGContextFillPath(context);
}


然后进行绘制

#define RADIANS(x) ((x)*(M_PI)/180)获取弧度

- (void)drawRect:(CGRect)rect
{
    // Drawing code
//    [self drawLineDash];
//    [self drawEllipse];
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextSetShadow(context, CGSizeMake(0, 10), 10); //简单的设置了一个阴影
    double radius = 120;
    
    float start = RADIANS(0);
    float end = RADIANS(120);
    drawPieChart(context, self.center, start, end, radius, [[UIColor orangeColor] CGColor]);
    
    start = end;
    end = RADIANS(194);
    drawPieChart(context, self.center, start, end, radius, [[UIColor yellowColor] CGColor]);
    
    start = end;
    end = RADIANS(231);
    drawPieChart(context, self.center, start, end, radius, [[UIColor purpleColor] CGColor]);
    
    start = end;
    end = RADIANS(360);
    drawPieChart(context, self.center, start, end, radius, [[UIColor blueColor] CGColor]);
    
    CGContextRestoreGState(context);
}


效果




以上为本篇博客全部内容,欢迎指正和交流。如需转载请注明出处~

利用PLECS实现Boost变换器的闭环控制仿真与优化 本文详细介绍了如何利用PLECS仿真软件实现Boost变换器的闭环控制与优化。从基础原理到开环系统搭建,再到闭环控制设计与动态优化,提供了完整的仿真实践指南。通过PLECS的仿真功能,工程师可以有效诊断问题、优化参数,并实现高性能的DC-DC变换器设计。 阅读详情

相关推荐

人脸情绪识别(使用深度学习和OpenCV)

基于opencv与深度学习的人脸情绪识别系统

mx0390304的博客 8251

图文虚线之CGContextSetLineDash

图文虚线之CGContextSetLineDash

u013712343的博客 1043

SpotBugs使用

spotbugs命令行参数解析

javajingling的专栏 2947

画虚线

画虚线需要用到函数: CGContextSetLineDash 此函数需要四个参数: context – 这个不用多说phase - 稍后再说lengths – 指明虚线是如何交替绘制,具体看例子count – lengths数组的长度 CGContextRef context =UIGraphicsGetCurrentContext(); 

ffblog的专栏 612

关于mos管的压降问题(项目遇到问题总结)

在研发过程中没有出现问题的板子,到了小批时竟出现雷达一直在触发???找了大几天,没有头绪。心中疑惑颇多,加上老板催促,自考等原因,真是压力山大。4月份自考,只有差不多一个月时间了吧,没有什么大的收获,反而在查找硬件问题的过程中,发现了一个自己忽视的一个问题,就是关于Mos管的压降问题。 备考的过程崎岖不平,工作又问题多多,孰轻孰重,如何取舍?从心理来说,不想取舍什么,只是有所得就可以,过不了就过不了呗,已经毕业十五年了,没这个本科文凭不也过来了吗?只是代表了自己在这一段时间的思考,自己兴趣吧,没什么大不了

guangod的博客 2万+

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

绘制虚线--CGContextSetLineDash详解

绘图第三篇:CGContextSetLineDash 绘制虚线 就是上边的这个API,怎么用呢?看下边demo: 效果图:

学如逆水行舟 1793

普中科技ESP8266-01s模块CWJAP:3 FAIL报错?手把手教你用AT+CWSAP指令搞定WiFi配置

本文详细解析了普中科技ESP8266-01s模块常见的CWJAP:3 FAIL报错问题,并提供了通过AT+CWSAP指令正确配置WiFi的实战解决方案。文章涵盖错误根源分析、硬件连接指南、AT指令详解及高级调试技巧,帮助开发者快速解决ESP8266-01s模块的WiFi配置难题。

weixin_42653691的博客 201

java画虚线_Java Graphics - 如何绘制虚线风格线

import java.awt.BasicStroke;import java.awt.Graphics;import java.awt.Graphics2D;import javax.swing.JFrame;import javax.swing.JPanel;public class LinesDashes1 extends JPanel {public void paintComponent...

weixin_36474795的博客 1229

Kimi K3大模型API实战:从调用到本地知识库问答系统构建

大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例

weixin_30694389的博客 299

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2247

UIKit和Core Graphics绘图(三)——绘制虚线,椭圆以及饼图

绘制虚线 虚线绘制主要调用CGContextSetLineDash函数。 这个函数有4个参数,除了一个是上下文外,phase为初始跳过几个点开始绘制,第三个参数为一个CGFloat数组,指定你绘制的样式,绘几个点跳几个点(下面为绘10个点,跳过5个),最后一个参数是上个参数数组元素的个数。 - (void)drawLineDa...

weixin_30686845的博客 92

ZYNQ 使用AXI_BRAM实现PS与PL 数据交互数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过Block RAM实现。通过Zynq 的GP Master 接口读写PL端的 BRAM,实现PS与PL的交互。加入自定义的 FPGA 程序,并利用 AXI4 总线进行配置,通知何时读写 BRAM。CPU通过 AXI BRAM Controller 读取 BRAM 数据,CPU 仅配置自定义的 PL BRAM Controller 的寄存器,不通过它读写数将BRAM与socket进行联合使用,将电脑的数据发到PS端,PS端放在PL端,PL端再发给PS端,P据。

wangjie36的博客 1万+

Core Graphics框架

在iOS中常用的框架是Quartz 2D,它是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎。我们日常开发所用到的UIKit的组件都是由Core Graphics框架进行绘制的。当我们导入UIKit框架时,会自动导入Core Graphics框架。 在iOS中绘图一般分为以下几个步骤: 1.获取绘图上下文 2.创建并设置路径 3.将路径添加到上下文 4.设置上下文的

bieguolaia的博客 305

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Core Graphics快速入门

Core Graphics入门 想必每个第一次接触Core Graphics的开发者都被无数的API、混乱的代码逻辑折腾得头疼不已,甚至望而却步。即使是绘制一个简单的矩形也看上去非常繁琐。本文换一个角度,整理一下有关Core Graphics的知识,也算作是这段时间学习的总结。 Core Graphics和UIKit的区别 首先从概念上了解一下: 根据苹果的描述,UIK

u013488791的博客 366

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS开发系列--打造自己的“美图秀秀”

Quartz 2D在UIKit中也有很好的封装和集成,我们日常开发时所用到的UIKit中的组件都是由Core Graphics进行绘制的。图形上下文CGContextRef代表图形输出设备(也就是绘制的位置),包含了绘制图形的一些设备信息,Quartz 2D中的所有对象最终都必须绘制到图形上下文。//设置顶点样式,(20,50)和(300,100)是顶点。//绘制直线(从起始位置开始)相信大家了解了上面的绘制步骤其他图形绘制并不麻烦,下面以一个例子简单演示一下其他图形的绘制,包括文字和图像的绘制。

VFK3sLDl4的博客 234

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

W2i0l1l5y的博客 558

IOS Core Graphics之CGContext详解

0    CGContextRef context = UIGraphicsGetCurrentCont ext(); 设置上下文   1 CGContextMoveToPoint 开始画线   2 CGContextAddLineToPoint 画直线   4 CGContextAddEllipseInRec t 画一椭圆   4 CGContextSetLineCap 设置线条终点形状

W10207010218的博客 652

CGContextRef使用详解

CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文     //画一条线     CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);//线条颜色     CGContextSetLineWidth(con

TaidyPanda的专栏 833

iOS CGContextRef画图小结

风之语2018 http://blog.sina.com.cn/s/blog_9693f61a0101deko.html  CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文     //画一条线     CGContextSetStrokeColorWithColor(context, [

linxinfei的专栏 381

IOS Quartz 各种绘制图形用法

- (void)drawRect:(CGRect)rect   {       CGContextRef context = UIGraphicsGetCurrentContext();                           /*NO.1画一条线               CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0

qq_22981537的专栏 365

IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等...

//OnlyoverridedrawRect:ifyouperformcustomdrawing. //Anemptyimplementationadverselyaffectsperformanceduringanimation. -(void)drawRect:(CGRect)rect { CGContextRefcont...

weixin_30399871的博客 77

IOS Swift3 基本图形绘制

import UIKit class ViewController: UIViewController {     override func viewDidLoad() {         super.viewDidLoad()         // Do any additional setup after loading the view, typically fro

appiox8的博客 3318
上一篇: UIKit和Core Graphics绘图——构造路径,阴影以及渐变扩展
下一篇: UIKit和Core Graphics绘图——绘制光泽,仿射变换与矩阵变换
RannieR
博客等级 码龄14年 180粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值