iOS图形绘制CoreGraphics篇

IOS端K线系列之绘制方法比较(CoreGraphics、CoreAnimation) 写在前面关于在IOS端进行原生界面绘制,苹果开发文档里明确提供了几种方法: 使用系统提供的标准视图,例如lists, collections, alerts, images, progress bars, tables等。 使用Core Animation的图层,Core Animation不仅提供了动画的类,还提供了显示内容的图层类。 使用OpenGL ES,这个框架提供了一套开放标准的图形绘制库 阅读详情
1、绘制直线

//获取当前上下文
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    UIColor *color = [UIColor colorWithRed:0.5 green:0.35 blue:0.8 alpha:0.7];
    //设置线条颜色
//    CGContextSetStrokeColor(contextRef, CGColorGetComponents([UIColor redColor].CGColor));
    //官方推荐首选这个API
    CGContextSetStrokeColorWithColor(contextRef, [UIColor redColor].CGColor);
    //设置线条颜色
    CGContextSetLineWidth(contextRef, 5);
    //设置线条端点(不带端点)
    CGContextSetLineCap(contextRef, kCGLineCapButt);
    //设置线条绘制的起始坐标点
    CGContextMoveToPoint(contextRef, 50, 20);
    //结束点
    CGContextAddLineToPoint(contextRef, 100, 20);
    //绘制线条路径
    CGContextStrokePath(contextRef);

这里插播一个从指定UIColor对象中获取RGB值得方式,上面设置线条颜色方法:CGContextSetStrokeColor第二个参数有用到。


    //它是返回一个存储RGB与Alpha值得数组
    const CGFloat *componets =  CGColorGetComponents(color.CGColor);
    CGFloat r,g,b,a;
    //R值
    r = componets[0];
    //G值
    g = componets[1];
    //B值
    b = componets[2];
    //Alpha值
    a = componets[3];


不信,此处看客可以打印RGB、Alpha值试试!

2、绘制矩形
  //设置线条颜色
    CGContextSetStrokeColorWithColor(contextRef, [UIColor blueColor].CGColor);
    CGContextSetLineWidth(contextRef, 2);
    //绘制矩形边框
    CGContextStrokeRect(contextRef, CGRectMake(50, 30, 80, 80));
//    CGContextSetFillColor(contextRef, CGColorGetComponents([UIColor cyanColor].CGColor));
    //绘制实心矩形
    CGContextSetFillColorWithColor(contextRef, [UIColor cyanColor].CGColor);
    CGContextFillRect(contextRef, CGRectMake(50, 120, 80, 80));

    //绘制带边框的矩形
    CGContextSetStrokeColorWithColor(contextRef, [UIColor brownColor].CGColor);
    CGContextSetFillColorWithColor(contextRef, [UIColor magentaColor].CGColor);
    CGContextSetLineWidth(contextRef, 2);
    CGContextAddRect(contextRef, CGRectMake(50, 210, 80, 80));

    //绘制路径方式:
    /*CGPathDrawingMode:
     *kCGPathFill,  //用非零绕数规则填充(什么鬼?)
     *kCGPathEOFill,    //用奇偶规则填充不带边框
     *kCGPathStroke,    //描线
     *kCGPathFillStroke,    //描线填充
     *kCGPathEOFillStroke   //奇偶填充带边框
     */
    CGContextDrawPath(contextRef, kCGPathFillStroke);

这里介绍一下设置线型为虚线的方式(虚线绘制方式)


/*
*phase:    虚线开始部分绘制大小
*const CGFloat *lengths:   虚线排列的大小规则数组,数组的值用来指定绘制与未绘制部分的长度(间隔)
*例如{2,3}指交替绘制2个单元长度的线段与3个单元长度未绘制长度线段(间隙)
*例子示意图:      --   --   --   --   --   --
*{1,3,4,2}绘制一个单元长度线段,间隔3个单元长度空隙,接着绘制4个长度的线段,间隔2个单元长度的空隙
*例子示意图:      -   ----  -   ----  -   ----  -   ----  -
*size_t count: 虚线排列数组中参数值有用个数
*/

const CGFloat spaceArr[] = {6, 4, 5, 7};
CGContextSetLineDash(contextRef, 0, spaceArr, 4);
3、绘制贝塞尔曲线

CGContextSetStrokeColorWithColor(contextRef, [UIColor redColor].CGColor);
CGContextSetFillColorWithColor(contextRef, [UIColor grayColor].CGColor);
CGContextSetLineWidth(contextRef, 1);
CGContextMoveToPoint(contextRef, 50, 300);
//添加三个point坐标。绘制一条曲线。
//CGContextAddCurveToPoint(contextRef, 100, 320, 150, 300, 200, 360);
//添加二次曲线
CGContextAddQuadCurveToPoint(contextRef, 250, 380, 290, 280);
CGContextDrawPath(contextRef, kCGPathStroke);

4、绘制圆弧

CGContextAddArc(contextRef, 50, 390, 20.0, -10 * M_PI / 180, 60 * M_PI / 180, YES);
CGContextDrawPath(contextRef, kCGPathStroke);

5、绘制圆形

//绘制圆形:方式一
CGContextSetStrokeColorWithColor(contextRef, [UIColor blueColor].CGColor);
CGContextSetFillColorWithColor(contextRef, [UIColor redColor].CGColor);
CGContextAddArc(contextRef, 50, 480, 20.0, -180 * M_PI / 180, 180 * M_PI / 180, NO);
CGContextDrawPath(contextRef, kCGPathFillStroke);
//绘制圆形:方式二
CGContextAddEllipseInRect(contextRef, CGRectMake(0, 500, 80, 80));
CGContextDrawPath(contextRef, kCGPathFillStroke);

6、绘制多边型(六边形)

//绘制多边形
CGContextMoveToPoint(contextRef, 180, 500);
CGContextAddLineToPoint(contextRef, 100, 550);
CGContextAddLineToPoint(contextRef, 180, 600);
CGContextAddLineToPoint(contextRef, 260, 600);
CGContextAddLineToPoint(contextRef, 340, 550);
CGContextAddLineToPoint(contextRef, 260, 500);
CGContextAddLineToPoint(contextRef, 180, 500);
CGContextDrawPath(contextRef, kCGPathFillStroke);
//最后关闭它!
CGContextClosePath(contextRef);

这里就不演示绘制图表了,其实过程都差不多,只是换一种绘制方法而已!
关于简单的图表绘制请参考上一篇,详细请点击:iOS图形绘制UIBezierPath篇

文中代码效果图:


不要问我为什么画的这么丑,因为我是粗糙的程序员!随性

参考博客地址:

转载请注明出处
iOS图形绘制CoreGraphics篇

iOS开发的2D绘制--CoreGraphics的简单使用三(画文字和图片) 在iOS开发当中,有时候我们可能会自己去绘制一些文字啊图片什么的,那么如何操作呢? 首先我们继续采用之前的Quartz2D方式,比如我想在界面上绘制出“你好我这句话是用自己绘制出来的哦”,怎么办呢? 阅读详情

相关推荐

iOS 绘制基本图形

很简单的小程序,是一个包含绘制三角形,矩形,圆,圆弧等图形的小dome,非常适合新手

OC 图片的剪切 制作xs带线框的壁纸

功能描述:   只能剪切正好适合xs的壁纸,方便用来出现边框的壁纸制作。 思路简述:   使用ScrollView来将需要的图片画在里面的定制ImageView里边,图像的大小宽或者长只有一个等于ScrollView的长宽,这样只能上下或者左右滑动。   目前的缺陷:在不进行任何滑动的操作时候,并且能够上下滑动时,直接截屏会导致整个画面的压缩进对应的截图里面。解决的办法就是,重写一个判断(...

weixin_30367169的博客 203

iOS中实现动态区域裁剪图片功能实例

图片处理中经常用的图片剪裁,就是通过剪裁框确定图片剪裁的区域,然后剪去该区域的图片,下面这篇文章主要给大家介绍了关于iOS中实现动态区域裁剪图片功能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。

IOS开发之利用UIBezierPath动态绘制多边形,并手拽坐标点动态改变图形形状

前两天公司项目需求,需要绘制一个多边形并且能进行拖拽改装图形形状,在网上搜索了一圈关于UIBezierPath的用法 大家举的范例都很死,没有一个 动态绘制图形的 因此 跟大家分享动如做到动态绘制并且动态改变 使用UIBezierPath绘制分两种: 1.一般创建一个UIView子类, 重写其中的drawRect方法,再drawRect方法中利用UIBezierPath添加画图 2.利用C...

成都IOS小牛的博客 1748

iOS实现图片六边形阴影效果

先来看看效果图 这个效果写起来挺简单,主要运用下面几个知识点      layer 的mask : 图层蒙版      layer 的shadowPath : 绘制自定义形状阴影      UIBezierPath :绘制六边形路线 说完知识点下面上代码了 绘制六边形的路线 -(CGPathRef)getCGPath:(CGFloat)viewWidth{ UIBezierPath * path = [UIBezierPath bezierPath]; path.lineWidth = 2; [[UIColor whiteColor] setStroke]; [path move

Win10+Anaconda环境下PaddleOCR保姆级安装指南(附常见报错解决方案)

本文提供Win10+Anaconda环境下PaddleOCR的保姆级安装指南,涵盖从环境配置到模型部署的全流程,特别针对常见报错提供解决方案。通过详细的步骤说明和实用技巧,帮助开发者快速完成PaddleOCR安装与测试,避免常见陷阱,提升OCR开发效率。

weixin_29096377的博客 375

iOS的花式进度条-五边形进度条,六边形进度条

使用quartz2d画出来的进度条,可以实现设置进度条颜色,背景等,适合高度自定义的App 六边形:https://github.com/KyRionY/-hexagonProgress 五边形:https://github.com/KyRionY/PentagonProgressView.git

qq_21453573的博客 577

centos+apache+subversion+LDAP

yum install subversion 报错:[Errno 14] HTTP Error 416 - Requested Range Not Satisfiable 正在尝试其它镜像。 zaici

qq_41566366的博客 1546

iOS UIView成像流程

总统

hengsf123456的博客 252

(P2)PALM软件的基本使用流程

上一篇介绍了PALM在Ubuntu系统上的下载安装及安装后的目录文件结构,这一篇以自带的案例介绍软件的基本操作流程。(请转至example_cbl项目) 输入 声明:官网均有各个变量的说明,以下代码来自软件自带案例 palm的最小输入文件是p3d文件,以下是example_cbl_p3d的详细说明。(文件语言格式Fortran,请自行先学习下语言的基本语法。笔者也是新学者,有非常多的问题,很多参数也不能准确的说出是什么意思,还请不吝赐教,谢谢!!!) !几点说明 !1、该运行文件基本由三大块组成:1)in

ysqzhatian的博客 3260

windows sever2019切换Linux内核

安装docker engine后,内核是windows,很多镜像都无法安装使用。 一,在https://github.com/linuxkit/lcow/release 下载最新版本release.zip,我使用了如下版本。 二,新建文件夹C:\Program Files\Linux Containers ,把release.zip(不要解压)放入此文件夹 三,编辑docker配置文件( C:\ProgramData\docker\config\daemon.json) ,电脑中没有该文件,新建一

记录日常疑问 3875

c语言缩略图算法,获取图像缩略图的框架

一、UIKitextension UIImage {//UIKitfunc resizeUI(size: CGSize) -> UIImage? {let hasAlpha = falselet scale: CGFloat = 0.0 // Automatically use scale factor of main screen/**创建一个图片类型的上下文。调用UIGraphicsBe...

weixin_42525261的博客 601

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

iOS开发必备:DCRoundSwitch的CoreGraphics绘制原理与性能优化

想要打造一个现代、流畅的iOS开关控件吗?DCRoundSwitch是一个使用纯CoreGraphics绘制的开关控件,完全替代了UISwitch。这个开源项目通过优雅的图层架构和高效的绘制技术,为iOS开发者提供了一个高性能、可定制的开关解决方案。本文将深入解析DCRoundSwitch的CoreGraphics绘制原理,并分享关键的**性能优化**技巧,帮助你在自己的项目中实现类似的精美控件。

gitblog_00301的博客 453

计算机视觉 | 面试题:01、过拟合和欠拟合的表现与解决方法

问题 过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合,还有一种是适度拟合,适度拟合就是我们模型训练想要达到的状态,不过适度拟合这个词平时真的好少见,在做酷狗音乐的笔试题时还懵逼了一会,居然还真的有这样的说法。 这应该是基础中的基础了,笔试题都做烂了。那就当做今天周末,继续放个假吧…… 过拟合 过拟合的表现 模型在训练集上的表现非常好,但是在测试集、验证集以及新数据上的表现很差,损失曲线呈现一种高方差状态。(高方差指的是训练集误差较低,而测试集误差比训练集大较多) 过拟合的原因 从两个角度去分析

Mrrunsen的博客 869

YOLOv11改进 | 特殊场景检测篇 | 低照度图像增强网络SCINet改进黑暗目标检测(全网独家首发)

本文给大家带来的改进机制是低照度图像增强网络SCINet,SCINet(自校正照明网络)是一种专为低光照图像增强设计的框架。它通过级联照明学习过程和权重共享机制来处理图像,优化了照明部分以提升图像质量。我将该网络集成在YOLOv11的主干上针对于图像的输入进行增强,同时该网络的并不会增加参数和计算量,基本和普通的网络结构保持一致,同时该结构支持自定义调节层数,来控制图像增强的效果 ,非常适合想要在黑夜目标检测领域发表文章的读者,该基本网络不会影响模型的速度。欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 2207

CoreGraphics,QuartzCore, CoreAnimation区别

CoreGraphics,QuartzCore, CoreAnimation区别

逝水无情的博客 866

ABAP Channels 之 WebSocket 通信实践:用 ABAP Push Channel 打造实时应用

摘要:本文介绍了ABAP Push Channel(APC)技术,它通过WebSocket协议实现ABAP系统与外部客户端的实时双向通信。文章对比了传统HTTP轮询与WebSocket的差异,解释了APC的事件模型及其接口演进(从IF_APC_WS_EXTENSION到IF_APC_WSP_EXTENSION)。通过仓库拣货等实际案例,展示了APC在企业级应用中的价值,如实时监控、协作场景等。文中还详细阐述了ABAP引擎中WebSocket的交互模型,说明其资源优化设计原理,并提供了基础代码示例。该技术解决

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 296

CoreGraphics详解

iOS开发中我们经常会使用UIButton,UILabel等,这些简单的api可以让我们很快完成常规界面的开发。如果碰到一些需要自定义的界面,我们肯定需要自己绘制。今天就学习记录下iOS中关于绘制的框架CoreGraphics。Core Graphics是基于Quartz 2D的一个高级绘图引擎,常用于iOS,tvOS,macOS的图形绘制应用开发。Core Graphics是对底层C语言的一个简单封装,其中提供大量的低层次,轻量级的2D渲染API。###系统的绘图框架UIKit。

liuxinzhongliubin的博客 1519

jre9下载 jdk9

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

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

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

iOS开发的2D绘制--CoreGraphics的简单使用二(画图形)

上一篇给大家简单介绍了如何绘制线条,这次我们升级了,我们开始绘制图形, 其实绘制图形也是很简单的,iOS的SDK给我们封装了许多好用的API,废话不多说,实战吧骚年。。。 我们先来画一个圆和一个矩形,看过我上一篇文章的朋友应该会知道,首先是drawRect重写,然后获得图形上下文CGContextRef, 好了,开搞: - (void)drawRect:(CGRect)rect

月若无涯的专栏 2492

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

对CoreGraphics和QuartzCore的理解

一直对于CoreGraphics,QuartzCore,CoreAnimation这三个概念区分不清,在此梳理一下。 首先明确定义,CoreGraphics,核心图形。 QuartzCore,Quartz是位于Mac OS X的Darwin核心之上的绘图层。 CoreAnimation,核心动画。 CoreGraphics: 它是ios的核心图形库,平时使用最

Make___的专栏 6993

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS开发的2D绘制--CoreGraphics的简单使用一(画线条)

在iOS开发中,经常遇到需要重新绘制某些特定区域,比如画两条不同颜色的线、画一些文字什么的,那么如何去操作呢? 我将分几篇文章,慢慢的介绍一下iOS开发当中的2D绘制问题。 **********正式开始了*********月若无涯原创******** 首先我们在每次创建一个view的时候,应该都能看到有如下这样的部分的代码: /* // Only override draw

月若无涯的专栏 3879

iOS绘图框架CoreGraphics

由于CoreGraphics框架有太多的API,对于初次接触或者对该框架不是十分了解的人,在绘图时,对API的选择会感到有些迷茫,甚至会觉得iOS的图形绘制有些繁琐。因此,本文主要介绍一下iOS的绘图方法和分析一下CoreGraphics框架的绘图原理。 一、绘图系统简介 iOS的绘图框架有多种,我们平常最常用的就是UIKit,其底层是依赖CoreGraphics实现的,而且绝大多数的图形界面也都...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 402

ios CoreGraphics 随笔

数组中,数组的顺序取决于颜色空间的类型。坐标系统转换:CoreGraphics 提供了坐标系统转换的功能,可以在不同的坐标系之间进行转换。动画效果:利用 CoreGraphics 可以实现一些简单的动画效果,如淡入淡出、移动、缩放等。图形绘制:使用 CoreGraphics 可以绘制各种基本图形,如线条、矩形、圆形、多边形等。游戏开发:在游戏开发中,可以使用 CoreGraphics 进行图形绘制和动画效果的实现。文本处理:可以使用 CoreGraphics 绘制文本,设置字体、大小、颜色等属性。

weixin_38432324的博客 465

【iOS学习】基于CoreGraphics的3D渲染方案

前言 今年的首要研究对象OpenGL基本研究的差不多了,突发奇想,想用CoreGraphics根据OpenGL的渲染流水线,渲染出3D图形来。折腾了2天,写出了个demo,效果如下。 其实这种通过2D渲染引擎渲染3D的技术方案在Flash时代我就听说了,但是当时对于3D技术不是很了解,并没有做深入研究。 原理 在OpenGL中,每个顶点通过Vertex Sh

iOS学习的博客 786

iOS学习6:CoreGraphics简单绘图

一、导入coreGraphics.framework 二、绘制图形 1、绘制矩形 // 绘制矩形 - (void)drawRectangle { // 定义矩形的rect CGRect rectangle = CGRectMake(100, 290, 120, 25); ...

chenghuyi8987的博客 117
上一篇: iOS图形绘制UIBezierPath篇
下一篇: iOS开发之Xcode常用调试(Debug)技巧总结
Skinny Camel
博客等级 码龄15年 71粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值