Quartz 2D绘图基本用法

AutoCad2023 快速教程 2D & 3D 我蓦然浮起疑念,这不大像是我的人生,我好像是在某人准备好的场所按某人设计好的模式生活——《国境以南太阳以西》\\\; 阅读详情
 1.获取上下文
 2.设置路径(画的形状)
 3.将路径添加到上下文
 4.设置上下文属性(画笔的粗细、颜色、阴影等)
 5.绘制路径
 6.释放路径(某些情况)
  //1.取得上下文(画布)
    CGContextRef context = UIGraphicsGetCurrentContext();

    //绘制线条
//    [self drawLine:context];
//    [self drawLine2:context];

    //绘制矩形
//    [self drawShapeRect:context];

    //绘制圆
//    [self drawArc:context];

    //绘制贝塞尔曲线
//    [self drawCure:context];

    //绘制文字
//    [self drawText:context];

    // 绘制图像
    [self drawImg:context];
}
#pragma mark - 绘制图像
- (void)drawImg:(CGContextRef)context {

    UIImage *img = [UIImage imageNamed:@"2012100413195471481.jpg"];
    //UIKit中提供的绘图方式
    //  1> 指定绘制图像的点,无法设置图片的大小
//    [img drawAtPoint:CGPointMake(50, 50)];
    // 2> 在指定的区域绘制,图片会被拉伸
//    [img drawInRect:CGRectMake(0, 0, 320, 200)];
    // 3> 在指定区域绘制图片,平铺
//    [img drawAsPatternInRect:CGRectMake(0, 0, 320, 200)];

    //Core Graphic中的绘图方式

    //保存context
    CGContextSaveGState(context);

    //转换坐标
    //顺时针旋转180
//    CGContextRotateCTM(context, M_PI);
    //缩放
    CGContextScaleCTM(context, 1, -1);
    //平移
    CGContextTranslateCTM(context, 0, -200);

    CGContextDrawImage(context, CGRectMake(0, 0, 320, 200), img.CGImage);

    //回复上下文
    CGContextRestoreGState(context);

}

#pragma mark - 绘制文字
- (void)drawText:(CGContextRef) context {

    //如果相对文字设置有特殊的要求,可以用:Core Text  底层:C

//    NSString *string = @"无限互联3G学院";
    NSString *string = @"hello world hello world hello world hello world hello world";

    CGRect rect = CGRectMake(50, 50, 200, 200);

    //设置颜色
    [[UIColor redColor] setFill];

    //绘制矩形
    UIRectFill(rect);

    //设置字体的颜色
    [[UIColor greenColor] setFill];

    UIFont *font = [UIFont systemFontOfSize:20];

    //绘制文字
    [string drawInRect:rect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];

}

#pragma mark - 绘制贝塞尔曲线
- (void)drawCure:(CGContextRef) context{

    //1.设置起始点
    CGContextMoveToPoint(context, 20, 200);

    /*
     context:  绘制的上下文
     cp1x,cp1y:  第一条切线的终点
     cp2x,cp2y;  第二条切线的起点
     x,y   第二条切线的终点
     */
//    CGContextAddCurveToPoint(context, 100, 20,
//                                      200, 300,
//                                      300, 50);

    CGContextAddQuadCurveToPoint(context, 140, 20, 300, 200);

    //绘制
    CGContextDrawPath(context, kCGPathStroke);


}

#pragma mark - 绘制圆弧
- (void)drawArc:(CGContextRef)context {

    //1.绘制圆弧
    /*
     context:  上下文
     x,y:       圆心坐标
     radius:    半径
     startAngle:  起始角度
     endAngle:  结束的角度
     clockwise:  顺时针: 0   逆时针  1
    CGContextAddArc(context, 160, 100, 100 , 0, M_PI/4, 1);

    //设置颜色
    [[UIColor redColor] setFill];

    //绘制
    CGContextDrawPath(context, kCGPathStroke);
    */

    //2.利用矩形绘制圆
    CGRect rect = CGRectMake(50, 50, 200, 200);

    //设置颜色
    [[UIColor redColor] setStroke];
    [[UIColor greenColor] setFill];

    //绘制矩形
    UIRectFrame(rect);

    //绘制矩形的内切圆
    CGContextAddEllipseInRect(context, rect);
    //绘制
    CGContextDrawPath(context, kCGPathFillStroke);

}

#pragma mark - 绘制矩形
- (void)drawShapeRect:(CGContextRef)context {

/*---------------------1.Graphic提供的方法------------------------------*/

//    //1.获取上下文
//   
//    //2.绘制矩形
//    CGRect rect = CGRectMake(40, 40, 100, 200);
//    CGContextAddRect(context, rect);
//   
//    //3.设置线条的宽度和颜色
//    CGContextSetLineWidth(context, 5);
//    [[UIColor redColor] setStroke];
//    [[UIColor blueColor] setFill];
//   
//    //4.绘制
//    CGContextDrawPath(context, kCGPathFillStroke);

/*---------------------UIKit提供的方法------------------------------*/


    //设置颜色,注意:得在绘图之前设置
    [[UIColor redColor] setStroke];
    [[UIColor greenColor] setFill];

    CGRect rect = CGRectMake(40, 40, 100, 200);
    //实心的矩形
    UIRectFill(rect);
    //空心的矩形
    UIRectFrame(rect);

}

#pragma mark - 绘制线条2
- (void)drawLine2:(CGContextRef)context {

    //1.取得上下文

    //2.添加多条线
    CGPoint p0 = {50,50};
    CGPoint p1 = {200,200};
    CGPoint p2 = {50,200};
    CGPoint p3 = {50,50};
    CGPoint points[] = {p0,p1,p2,p3};
//    int a[3];
    CGContextAddLines(context, points, 4);

    //UIKit中设置颜色的方法
    //3.设置线条的颜色
    //设置线条的颜色
    [[UIColor redColor] setStroke];
    //设置填充的颜色
    [[UIColor greenColor] setFill];

    //设置线条和填充的颜色一样
//    [[UIColor redColor] set];

    //4.绘制路径
    CGContextDrawPath(context, kCGPathFillStroke);
}

#pragma mark - 绘制线条1
- (void)drawLine:(CGContextRef)context {

    /*1.获取上下文(取得画布)*/
//    CGContextRef context = UIGraphicsGetCurrentContext();

    /*2.创建一个需要绘制的路径*/

    //    CGPathRef  ,不可变的
    //可变的,可以动态添加
    CGMutablePathRef path = CGPathCreateMutable();

    //划线
    //(1)设置起始点
    CGPathMoveToPoint(path, NULL, 50, 50);
    //(2)设置目标点
    CGPathAddLineToPoint(path, NULL, 200, 200);
    CGPathAddLineToPoint(path, NULL, 50, 200);

    //封闭路径
    CGPathCloseSubpath(path);

    /*3.将路径添加到上下文*/
    CGContextAddPath(context, path);

    /*4.设置上下文的属性*/

    //(1)设置线条的颜色
    /*
     设置线条的颜色
     red (0-1)    red/255.0
     green  (0-1)  green/255.0
     blue  (0-1)  blue/255.0
     */
    CGContextSetRGBStrokeColor(context, 35/255.0, 116/255.0, 0, 1.0);

    //(2)设置填充颜色
    CGContextSetRGBFillColor(context, 0, 0, 1, 1.0);

    //(3)设置线条的宽度
    CGContextSetLineWidth(context, 3);
    //设置两条线之间连接点的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);
    //(4)设置圆角
    CGContextSetLineCap(context, kCGLineCapRound);
    //(5)设置虚线
    /*
     CGContextRef c           上下文
     CGFloat phase            相位,一般设置为0.f
     const CGFloat *lengths   C 数组
     size_t count             数组个数
     */
    CGFloat lengths[2] = {30,10};
    CGContextSetLineDash(context, 0.f, lengths, 2);

    /*5.绘制路径*/
    /*
     绘制模式
     kCGPathFill,  只填充,不会绘制边缘
     kCGPathStroke, 只绘制边缘,空心
     kCGPathFillStroke, 即画边缘,也填充
     */
    CGContextDrawPath(context, kCGPathFillStroke);

    /*6.释放路径*/
    CGPathRelease(path);

}

@end
Penpot自托管全攻略:5分钟搞定私有化部署(附Docker配置详解) 本文详细介绍了Penpot开源原型设计工具的私有化部署全流程,从Docker基础配置到企业级优化方案。通过分步指南和实战技巧,帮助设计团队快速搭建安全高效的自托管环境,实现数据自主可控。内容涵盖LDAP集成、性能监控、备份策略等关键企业需求,是Penpot私有化部署的完整参考手册。 阅读详情

相关推荐

MinerU与Docling:智能文档处理框架对比

本文对比分析了MinerU和Docling两大智能文档处理框架。MinerU专注于高精度PDF解析,采用多模态AI技术,在学术文献、金融报表等复杂文档处理上表现优异;Docling则定位企业级多格式文档处理平台,支持10+格式转换,更适合文档管理系统等场景。技术层面,MinerU基于VLM模型实现端到端处理,Docling采用插件化多后端架构。性能测试显示MinerU精度更高(95%+),但资源消耗较大;Docling处理速度更快(1-3秒/页),部署更灵活。

轩哥的个人研究和成长记录 1910

2D绘图01概述、基本操作、几何作图

回答:CAD中的图形实体,分为“线框”、“面”、“实体”三种。(3)在基点上停住,出现靶框后沿x或y方向移动鼠标至你需要的大概距离处,键入距离回车,(在该距离处会出现一个绿色十字),鼠标直接下移至绿色十字下方,键入另一距离。回答:提供2中可能的解决方法,只是“可能”的方法,建议同学们在官网(Autodesk.com.cn)安装教育版。(1)状态栏(软件最下方的一条)中的“动态输入”系统默认是打开的,但该图标并不显示在状态栏中。前提:“极轴”、“对象捕捉追踪”、“对象捕捉”要打开,见下图。

Best_Wishes__的博客 684

4090显卡实测:PointPillars在KITTI数据集上的3D目标检测复现全流程(附避坑指南)

本文详细记录了在NVIDIA RTX 4090显卡上,从环境搭建、数据处理到模型训练与评估,完整复现PointPillars算法在KITTI数据集上进行3D目标检测的全流程。重点分享了版本配置、数据预处理、性能调优及常见问题的避坑指南,帮助开发者高效利用硬件资源,成功跑通并理解这一经典3D检测项目。

purple的博客 914

[Qt教程] 第11篇 2D绘图(一)绘制简单图形

[Qt教程] 第11篇 2D绘图(一)绘制简单图形 楼主  发表于 2013-4-23 12:52:35 | 查看: 1398| 回复: 5 绘制简单图形 版权声明 该文章原创于Qter开源社区,作者yafeilinux,转载请注明出处! 导语 Qt中提供了强大

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 2598

从零开始:TexLive(Latex)安装与配置全指南

本文提供了一份详尽的TexLive(Latex)安装与配置全指南,旨在帮助用户从零开始快速搭建LaTeX工作环境。内容涵盖从镜像下载、安装步骤详解、环境验证到高效编辑器(如VS Code)配置,并特别强调了中文排版支持与宏包管理,确保用户能顺利处理学术论文等专业文档的排版需求。

weixin_29284885的博客 903

银河麒麟鲲鹏aarch64架构安装docker和K8s

鲲鹏云服务器上安装docker-云社区-华为云 (huaweicloud.com) 这里我下载的版本是docker-18.09.3.tag docker 安装包地址:https://download.docker.com/linux/static/stable 配置system服务 在github对应分支的contrib/init/systemd/ 下面,提供了对应的docker.service以及docker.socket文件,可以直接拷贝到本地文件使用: 对应链接:https://github.c

qq_50007696的博客 9055

iOS基础 - Quartz 2D绘图的基本步骤

一、使用Quartz 2D绘图的基本步骤 1) 获取上下文context(绘制图形的地方) 2) 设置路径(路径是用来描述形状的) 3) 将路径添加到上下文 4) 设置上下文属性(设置颜色,线宽,线性等) 5) 绘制路径 6) 释放路径(在Quartz2D中,因为是C语言的框架,所有用Create,Copy字样方法实例化的对象,都需要自行释放) 二、Quartz2D是一套C语言的框架

446

华为防火墙 策略路由实现多ISP接入Internet

PC3上网访问Server1时走ISP1。PC4上网访问Server1时走ISP2。1、配置接口IP并加入相应的安全区域。二、ISP2 运营商 R2路由器。一、ISP1 运营商 R1路由器。

一直被模仿,从未被超越 3014

(1)2D绘图详解(QPainter)

一、Qt绘制事件 当应用程序收到绘制事件时,就会调用QWidget::paintEvent(),该函数就是绘制窗口的地方。 有两种方法要求重绘一个窗口 1.update() --把重绘事件添加到事件队列中 重复调用update()会被Qt合并为一次 不会产生图像的闪烁 可带参数指定重绘某个区域 2.repaint() --立即产生绘制事件 一般情况下不推荐使用此方法 只使用在需要立即重绘的特效情况下 可带参数指定重绘某个区域 基本绘制 QPainter类提供绘制操作,其构造函数原型为: QPaint

qq_40329851的博客 1535

康耐视visionpro-CogCreateSegmentAvgSegsTool操作工具详细说明

康耐视visionpro-CogCreateSegmentAvgSegsTool操作工具详细说明

视觉人机器视觉的博客 1479

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

iOS-Quartz2D绘图的基础用法总结

在UIView的drawRect:方法中具体使用Quartz2D 1获取当前上下文 CGContextRef ctx = UIGraphicsGetCurrentContext();  2拼接图形(界面) 起点 CGContextMoveToPoint(ctx, 10, 10); 线段-从起点到终点 CGContextAddLineToPoint(ctx, 100, 100); 3

lee89757的博客 475

【如何利用扩展卡尔曼滤波解决跟踪毫米波雷达目标】

笛卡尔坐标系(非极坐标系):使用两个垂直的轴(通常是x轴和y轴)来确定一个点的位置。你沿着这两个轴移动确定的距离来找到这个点。极坐标系:使用一个角度和一个距离来确定一个点的位置。首先,你转到一个特定的方向(角度),然后沿着那个方向移动确定的距离来找到这个点。希望这个例子能帮助你理解两种坐标系的基本概念!

小秋 AI SLAM 入门实战教程 884

iOS开发-Quartz 2D绘图高阶用法

在前面给大家讲了Quartz 2D在iOS开发中的价值以及它的强大就是自定义UI控件那么在项目开发中我们还会用到很多Quartz 2D的技术这个确实值得我们深入研究! 1>图片水印 2>裁剪图片 3>条纹背景   // //  ViewController.h //  Quartz 2D高级用法 // //  Created by 周昭 on 16/4/8....

ZZ_iOSdeveloper的博客 669

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IOS Quartz2D 相关

iOS开发UI篇—Quartz2D简单使用(一) IOS之Quartz          CGContext 小Demo                      iOS开发系列--打造自己的“美图秀秀”

编程路上的野花 1726

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

学习IOS开发UI篇--Quartz2D基本绘图

  Quartz2D绘图的代码步骤 1.获得图形上下文CGContextRef ctx = UIGraphicsGetCurrentContext();2.拼接路径(下面代码是搞一条线段)CGContextMoveToPoint(ctx, 10, 10);CGContextAddLineToPoint(ctx, 100, 100);3.绘制路径CGContextStrokePath(ctx); ...

weixin_30408675的博客 234

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS Quartz笔记

Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac OS X系统(跨平台,纯 C 语言的)。包含在 Core Graphics 框架中。 Quartz 2D能完成的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 Quartz2D 是苹果官方的二维绘图引擎,同时支持 iOS 和 Mac OS

沐风 1133

Quartz2D

Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 用法: 新建一个类,继承自 UIView 实现- (void)drawRect:(CGRect)rect方法,然后在这个方法中 /* 作用:专门用来绘图 什么时候调用:当view现实的时候调用 */ - (void)drawRect:(CGRect)rect { // NSL...

weixin_30919235的博客 73

iOS图像处理之Core Graphics和OpenGL ES初见

http://www.jianshu.com/p/f66a7ca326dd iOS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES。OpenGL ES是跨平台的图形API,属于OpenGL的一个简化版本。QuartZ 2D是苹果公司开发的一套API,它是Core Graphics Framework的一部分,是一套基于C的API框架,使用了Qu...

diaoju3333的博客 216

Quartz 2D学习(二)绘制曲线

Quartz 2D学习(二)绘制曲线 Quartz 2D是一个二维图形绘制引擎,它支持iOS环境和Mac OS X环境,为开发者提供了很多方便,它在绘图上的功能十分强大,如基于路径的绘图、透明度、阴影、颜色管理、反锯齿、PDF文档生成等。Quartz 2D作为Core Graphics框架的一部分,其中的很多数据类型和方法都是以CG为前缀的。

陈思浓 | Simon 688

Quartz 官网翻译(转载)

Paths中的几个重要元素 Points void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y ); 指定一个点成为current point Quartz会跟踪current point一般执行完一个相关函数后,current point都会相应的改变. Lines 相关的几个...

weixin_30826761的博客 92

iOS:iOS开发系列–打造自己的“美图秀秀”(下)

来源: KenshinCui    链接:http://www.cnblogs.com/kenshincui/p/3959951.html 运行效果:   其他图形上下文 前面我们也说过,Quartz 2D的图形上下方除了可以绘制到层上还可以绘制到位图、PDF等,这里我们就介绍一下如何利用Quartz 2D绘制图像到位图及PDF中。 上面的示例中一直都是在drawRect:方法中利...

weixin_34026276的博客 136

IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

原文地址:http://blog.youkuaiyun.com/rhljiayou/article/details/9919713

xdRao的专栏 911

iOS小知识点一二三

1. 你是否注意到,默认情况下Upside Down方向是不被选中的?这是因为,如果iPhone倒置时来电,那么在接听电话时,手机仍然可能处于倒置状态。而iPad应用项目默认支持所有方向,因为在任何方向上都应该能够使用iPad。 2. 我们在应用的全局配置中指定应用所支持方向的绝对上限。如果全局配置不支持upside-down方向,那么任何一个视图控制器都不能迫使系统旋转到upside-down方向。在视图控制器能做的就是在可接受的范围内进一步限制。 3. 在iPad上,大部分基于导航的应用程序都是使.

u013712343的博客 228
上一篇: Block的用法
下一篇: Quartz 2D 实例:Watermark
Mainning
博客等级 码龄12年 7粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值