学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少。

今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下。

最近学习了Quartz2D,一款二维绘图引擎,可以用于绘制各种图形、文字、图片等,并且具备裁剪、生成图片、自定义UI控件等功能,据说iOS很多UI控件都是通过它画出来的。

但是在美工如此强大的今天,并不需要利用Quartz2D画出多么美观的界面,而是利用它来做一些程序运行时美工无法实现或者相对麻烦的功能,比如动态绘图(涂鸦板、K线图等各种分析类图表)、裁剪图片、手势解锁等。

出于一个曾经美工的执念,我使用Quartz2D画了一个简单的机器猫头像,关于Quartz2D的基础绘制知识,博客园很多,我就直接贴出绘制过程了;

1、我是直接新建了一个view,直接在drawRect方法中取得图层上下文进行绘制,也可以直接创建一个基于位图的上下文,从上下文中取得制作完毕的UIImage对象。首先获取和view相关的图形上下文,设定线条样式,并且保存了一份在上下文栈中,以防后面需要用到。其中每个部分的位置参数,就不仔细说明了,简单计算和尝试即可,每个人都有自己的设置方法;注意要把描边厚度考虑进去,线段厚度设置方式是里外各增加相同厚度,我这里设置的线段厚度为4,比如大圆的实际半径为:我们设置的大圆半径加上2才是正确的,所以有些参数+-2;

-(void)drawRect:(CGRect)rect
{//获取上下文,no *;CGContextRef ctx = UIGraphicsGetCurrentContext();//设置线宽为4,即描边CGContextSetLineWidth(ctx, 4);//线条颜色为黑色
    [[UIColor blackColor]setStroke];//保存一份原始的上下文栈CGContextSaveGState(ctx);

2、开始画头部:头部由两个圆形组成。一个蓝色大圆,以及中心点靠下的白色小圆:

    //设置中心点,根据中心点设置参数CGFloat viewW = self.frame.size.width * 0.5;CGFloat viewH = self.frame.size.height * 0.5;//蓝色大圆,画圆我一般喜欢画一条360度的弧线,这样是通过设置圆心位置来决定圆的位置。直接采用画圆的方法是根据左上角的顶点来设定位置;CGContextAddArc(ctx, viewW, viewH, 150, 0, M_PI * 2, 0);//设置圆的填充色,我根据取色器的数据设置的[[UIColor colorWithRed:15 / 255.0 green:106 / 255.0 blue:169 / 255.0 alpha:1] setFill];//使用这个方法渲染,可以渲染出描边。
    CGContextDrawPath(ctx, kCGPathFillStroke);//小圆,圆心稍微向下,半径变小CGContextAddArc(ctx, viewW, viewH + 30, 115, 0, M_PI * 2, 0);[[UIColor whiteColor]setFill];CGContextDrawPath(ctx, kCGPathFillStroke);

3、画领带:

    //红色矩形,也可以直接画一条很粗的线段CGContextAddRect(ctx, CGRectMake(viewW - 125, viewH + 100, 250, 20));[[UIColor redColor]setFill];CGContextDrawPath(ctx, kCGPathFillStroke);

效果;

4、画眼睛、眼珠。都是由圆形构成,位置设置需要计算一下子;眼睛是对称的,画好一个,把X值对称一下就行了

 //眼睛是椭圆的,采用的是画圆的方式,此时圆的位置由左上角决定;CGRectMake:前两个参数为左上角位置;后两个参数代表圆宽和长,设置不同参数形成椭圆;
    [[UIColor whiteColor]setFill];CGContextAddEllipseInRect(ctx, CGRectMake(viewW, viewH - 120, 50, 80));CGContextAddEllipseInRect(ctx, CGRectMake(viewW - 50, viewH - 120, 50, 80));CGContextDrawPath(ctx, kCGPathFillStroke);//眼珠
    [[UIColor blackColor]setFill];CGContextAddEllipseInRect(ctx, CGRectMake(viewW + 10, viewH - 70, 20, 20));CGContextAddEllipseInRect(ctx, CGRectMake(viewW - 30, viewH - 70, 20, 20));CGContextFillPath(ctx);//鼻子
    [[UIColor redColor]setFill];CGContextAddArc(ctx, viewW, viewH - 38, 12, 0, M_PI * 2, 0);CGContextDrawPath(ctx, kCGPathFillStroke);

这样稍微有点机器猫的样子了;计算位置不用急,算不出来多试几次都能出来;

5、嘴巴、胡须的绘制;

 //鼻子下面的竖线CGContextMoveToPoint(ctx, viewW, viewH - 28);CGContextAddLineToPoint(ctx, viewW, viewH + 60);CGContextStrokePath(ctx);//嘴巴,曲线需要通过贝塞尔曲线绘制,和画线段一样,需要设置一个起点,然后再设置终点和一个控制点来设置弯曲程度;控制点离线段越远弯曲越大;CGContextMoveToPoint(ctx, viewW + 95, viewH + 18);CGContextAddQuadCurveToPoint(ctx, viewW, viewH + 100, viewW - 95, viewH + 18);CGContextStrokePath(ctx);//胡须,由线段构成,画好一边的另一边就出来了;CGContextMoveToPoint(ctx, viewW + 25, viewH - 20);CGContextAddLineToPoint(ctx, viewW + 75, viewH - 30);CGContextMoveToPoint(ctx, viewW + 25, viewH - 5);CGContextAddLineToPoint(ctx, viewW + 85, viewH - 10);CGContextMoveToPoint(ctx, viewW + 25, viewH + 10);CGContextAddLineToPoint(ctx, viewW + 75, viewH + 15);CGContextMoveToPoint(ctx, viewW - 25, viewH - 20);CGContextAddLineToPoint(ctx, viewW - 75, viewH - 30);CGContextMoveToPoint(ctx, viewW - 25, viewH - 5);CGContextAddLineToPoint(ctx, viewW - 85, viewH - 10);CGContextMoveToPoint(ctx, viewW - 25, viewH + 10);CGContextAddLineToPoint(ctx, viewW - 75, viewH + 15);CGContextStrokePath(ctx);

这样机器猫大体形状就出来了

6、最后一步剪切掉多余的部分,在一开始就设置上绘制范围,这样只有在这个范围的绘图才会显示

     //画裁剪范围,将这段代码放在绘制绘制大圆的前面CGContextAddRect(ctx, CGRectMake(viewW - 152, viewH - 152, 304, 272));CGContextClip(ctx);

这样就绘制完成了,然后多谢各位大神指正;

转载于:https://www.cnblogs.com/xiaoqiuge/p/4841582.html

Quartz2D之绘制一个简单的机器猫相关推荐

  1. python绘制一个简单的函数图像使用到了matplotlib库和numpy库

    文章目录 效果展示: 视频链接 实现的思想 使用到的函数包 图片一对应的代码展示 图片二 对应的代码展示 注意事项 效果展示: 视频链接 python绘制一个简单的函数图像(B站视频) 实现的思想 其 ...

  2. 使用inkscape绘制一个简单的logo

    使用inkscape绘制一个简单的logo Inkscape是开源的矢量图像编辑软件,与Illustrator.Freehand.CorelDraw.Xara X 等软件很相似,它使用 W3C 标准的 ...

  3. 计算机桌子用英语怎么画,如何用AI绘制一个简单的办公桌?

    小编:hello!好久不见,@菜菜给大家带来的是一篇如何利用简单的几何图形去绘制我们的办公桌,教程写的比较详细,很容易上手,赶快动起来吧,大家不要忘记交作业! 原图: 提示:文章中所有的描边都是内描边 ...

  4. java 线图_在Java中绘制一个简单的线图

    您的代码和建议的问题: >再次,您需要更改组件的preferredSize(这里是Graph JPanel),而不是大小 >不要设置JFrame的边界. >在添加组件之后并在调用se ...

  5. HTML中用 div 绘制一个简单的房子

    昨天上午老师给我们简单讲了 CSS 中的 div,下午让我们画一个房子练手.我们可以将 div 理解成为一个盒子,而盒子中又可以放别的盒子,每个盒子中的内容互不影响,相对独立.因此,只要将图形中的内容 ...

  6. 用python绘制一个简单正三角形

    代码如下: #利用turtle绘制正三角形 from turtle import* #导入turtle库 pencolor('red')#设置画笔颜色 pensize(8) #画笔大小 fillcol ...

  7. linux下glew例子,一个简单的GLSL Shader例子

    本例子选自OpenGL Shading Language中的第一个Shader例子,使用颜色平滑地表示一个表面的温度.温度及其颜色的范围在应用程序中进行设置. //先看顶点着色器temp.vert: ...

  8. 使用C语言绘制一个笑脸smile

    首先我们绘制一个简单的例子 #include <math.h> #include <stdio.h>int main() {double a, b;for (b = 1; b ...

  9. 用python绘制熊猫图案_python – 有没有办法在ggplot中绘制一个熊猫系列?

    我正在尝试使用pandas和非matplotlib绘图.好建议是 here.这个问题关于 yhat's ggplot,我遇到了两个问题. 在熊猫中绘制系列很容易. frequ.plot() 我不知道如 ...

最新文章

  1. 外国教授在B站当UP主上课,网友直呼好家伙:滑铁卢大学《差分隐私》课程上线...
  2. 美多商城后台管理之登录、浏览器的同源策略
  3. GridView 与ImageAdapter (笔记)
  4. R语言数据包自带数据集之mtcars数据集字段解释、数据导入实战
  5. [ASP.NET] 限制上传文件类型的两种方法(转)
  6. ROS学习之节点间话题通信的
  7. python3读取ini文件_python3配置文件ini读取方法
  8. Qt控件中的属性sizePolicy说明
  9. shell统计游戏活跃用户数之改进过程分析
  10. Smali语法汇总(二)
  11. Java 创建xml文件和操作xml数据
  12. react-router 低版本的路由API
  13. [转载] 中华典故故事(孙刚)——33 人上一百形形色色
  14. 数据通信与计算机网络实训报告,数据通信网络实训总结报告.doc
  15. HTML入门(学习方法+概述)
  16. 苹果Mac安全使用教程:如何使用文件保险箱加密Mac数据
  17. 解除控制伽卡他卡控制
  18. 弘辽科技:淘宝类目属性的型号是什么?
  19. 基于MatlabSimulin的微电网模型及光伏电池建模仿真分析
  20. 广东电大计算机绘图试题,2014年电大计算机绘图期末复习试题及答案参考小抄.doc...

热门文章

  1. Snabbdom(虚拟dom-9-patchVnode函数)
  2. Asynchronous(异步处理-Generator)
  3. spring boot—自定义logback日志配置
  4. 训练自己的数据_PyTorch版CenterNet训练自己的数据集
  5. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享
  6. 初来乍到,请多指教。
  7. HTML5css3学习总结(2)
  8. ASP.Net服务端基本控件介绍
  9. eclipse easy shell plugin
  10. CDays-3 习题二 (字典及文件读取练习)及相关内容解析。Python 基础教程