Quartz2D 画大白
今天初始Quartz2D,我好激动啊,也好开心,莫名的会喜欢带有图形相关的课程……
好啦,闲话少说,今天用Quartz2D方法画了最最爱的大白。迫不及待的想要和大家分享。
1、首先实例化了view
2、在实例化的view的写代码就可以了,是不是很简单。
//不允许直接调用drawRect方法,使用setNeedsDisplay 间接调用drawRect方法
- (void)drawRect:(CGRect)rect {
//获得图形上下文
//获得当前图形上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//头
[self drawHeader:context];
[self drawHeader2:context];
//眼睛
[self drawEye:context];
[self drawEye2:context];
[self drawEye3:context];
[self drawEye4:context];
[self drawEyeLine:context];
//身体
[self drawBody:context];
[self drawBody2:context];
[self drawBody3:context];
[self drawBody4:context];
[self drawBody5:context];
//脚
[self drawBody6:context];
[self drawBody7:context];
}
#pragma mark 画头(上边)
- (void)drawHeader :(CGContextRef) context{
// 1. 圆心 ,半径,起始和终止角度 ,方向
CGContextAddArc(context, self.frame.size.width/2, 150, 50, 0,- M_PI, 1);
CGContextStrokePath(context);
}
#pragma mark 画头(下边)
- (void)drawHeader2 :(CGContextRef) context{
// 1. 圆心 ,半径,起始和终止角度 ,方向
CGContextAddArc(context, self.frame.size.width/2, 150, 50, 0,- M_PI, 0);
CGContextStrokePath(context);
}
#pragma mark 眼睛(左下)
-(void)drawEye:(CGContextRef) context{
CGContextAddArc(context, 162, 160, 10, 0,- M_PI, 0);
CGContextFillPath(context);
}
#pragma mark 眼睛(左上)
-(void)drawEye2:(CGContextRef) context{
CGContextAddArc(context, 162, 160, 10, 0,- M_PI, 1);
CGContextFillPath(context);
}
#pragma mark 眼睛(右下)
-(void)drawEye3:(CGContextRef) context{
CGContextAddArc(context, 212, 160, 10, 0,- M_PI, 0);
CGContextSetLineWidth(context, 3);
CGContextFillPath(context);
}
#pragma mark 眼睛(右上)
-(void)drawEye4:(CGContextRef) context{
CGContextAddArc(context, 212, 160, 10, 0,- M_PI, 1);
CGContextSetLineWidth(context, 3);
CGContextFillPath(context);
}
#pragma mark 眼睛连线
- (void)drawEyeLine :(CGContextRef) context{
//移动到某一点
CGContextMoveToPoint(context, 162, 160);
//添加一条线
CGContextAddLineToPoint(context, 212, 160);
CGContextSetLineWidth(context, 3);//线宽
// 3.绘制图形
CGContextStrokePath(context);
}
#pragma mark 身体(左) 贝塞尔
- (void)drawBody:(CGContextRef) context{
CGPoint p1=CGPointMake(152, 185);
CGPoint p2=CGPointMake(20, 290);
CGPoint p3=CGPointMake(120, 400);
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
#pragma mark 身体(右)贝塞尔
- (void)drawBody2:(CGContextRef) context{
CGPoint p1=CGPointMake(222, 185);
CGPoint p2=CGPointMake(355, 290);
CGPoint p3=CGPointMake(255, 400);
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
#pragma mark 身体(下)贝塞尔
- (void)drawBody3:(CGContextRef) context{
CGPoint p1=CGPointMake(120, 400);//第一个点
CGPoint p2=CGPointMake(187.5, 450);//中间的点
CGPoint p3=CGPointMake(255, 400);//第二个点
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
#pragma mark 身体(左胳膊) 贝塞尔
- (void)drawBody4:(CGContextRef) context{
CGPoint p1=CGPointMake(148, 180);
CGPoint p2=CGPointMake(0, 300);
CGPoint p3=CGPointMake(103, 380);
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
#pragma mark 身体(右胳膊)贝塞尔
- (void)drawBody5:(CGContextRef) context{
CGPoint p1=CGPointMake(226, 180);
CGPoint p2=CGPointMake(375, 300);
CGPoint p3=CGPointMake(272, 380);
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
#pragma mark 脚(左)贝塞尔
- (void)drawBody6:(CGContextRef) context{
CGPoint p1=CGPointMake(120, 400);
CGPoint p2=CGPointMake(140, 450);
CGPoint p3=CGPointMake(175, 424);
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
#pragma mark 脚(左)贝塞尔
- (void)drawBody7:(CGContextRef) context{
CGPoint p1=CGPointMake(255, 400);
CGPoint p2=CGPointMake(234, 450);
CGPoint p3=CGPointMake(199, 424);
CGContextMoveToPoint(context, p1.x, p1.y);
CGContextAddQuadCurveToPoint(context, p2.x, p2.y, p3.x, p3.y);
CGContextStrokePath(context);
}
@end
原谅小菜鸟见得世面少,不过,真的有认真地写了代码,请喜欢大白的童鞋,拿去试试吧,大白送给你们。
今天学习很开心,明天继续加油,大家一起加油哟~~
Quartz2D 画大白的更多相关文章
- 【二次元的CSS】—— 用 DIV + CSS3 画大白(详解步骤)
原本自己也想画大白,正巧看到一位同学(github:https://github.com/shiyiwang)也用相同的方法画了. 且细节相当到位.所以我就fork了一下,在此我也分享一下.同时,我也 ...
- AJ学IOS(34)UI之Quartz2D画画板的实现
AJ分享,必须精品 效果: 实现过程: 首先用storyboard搭建界面,没有什么好说的. 然后就是注意的功能了,这里用了触摸事件来搭配Quartz2D的路径来画画. 思路就是把路径放到数组中 @p ...
- 用纯CSS画大白
纯CSS打造网页大白知识点: 首先要把大白分割,整体baymax中包含header(eye1,eye2,mouth),torso(heart),belly(cover),l-bigfinge ...
- AJ学IOS(29)UI之Quartz2D自定义下载控件_画各种图形
AJ分享,必须精品 效果 自定义控件过程 主要过程在上一篇里有介绍了,这里主要介绍下代码实现 先做好要放的view 然后实现呢主要就是四步: 1:获取上下文 2:拼接路径 3:把路径添加到上下文. 4 ...
- Quartz2D之绘制一个简单的机器猫
学习iOS有一段时间了,在博客园也默默的潜水了两个月,见识了很多大神,收获不少. 今天整理笔记,发现忘记的不少,我感觉需要及时的整理一下了,同时也把做的小东西贴上来和大家分享一下. 最近学习了Quar ...
- iOS开发——UI进阶篇(十五)Quartz2D介绍
一.Quartz2D简介 1.什么是Quartz2DQuartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作绘制图形 : 线条\三角形\矩形\圆\弧等绘制文字绘 ...
- iOS开发UI篇—Quartz2D简单介绍
iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\ ...
- 【iOS】Quartz2D简单介绍
一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图 ...
- Quartz2D学习笔记(1)
********************************** 简介 *************************************** Quartz2D是⼀个二维绘图引擎,同时支持 ...
随机推荐
- mysql新建表示,时间字段timetamp碰到的问题
在mysql中创建表时,在新加的字段时间上,碰到下面的问题: 建表语句如下: CREATE TABLE seckill( seckill_id bigint NOT NULL AUTO_INCREME ...
- dubbo简单demo
zookeeper,可以集群,可以只安装一台 依赖dubbo jar, zkclient等 发布服务 <?xml version="1.0" encoding=" ...
- 源码阅读笔记 - 2 std::vector (2) 关于Allocator Aware Container特性
所有的STL容器,都保存一个或默认,或由用户提供的allocator的实例,用来提供对象内存分配和构造的方法(除了std::array),这样的容器,被称作Allocator Aware Contai ...
- 116、Android获取Manifest中<meta-data>元素的值
在AndroidManifest.xml中,<meta-data>元素可以作为子元素, 被包含在<activity>.<application> .<serv ...
- HUD 4007 [扫描线][序]
/* 大连热身B题 不要低头,不要放弃,不要气馁,不要慌张 题意: 坐标平面内给很多个点,放置一个边长为r的与坐标轴平行的正方形,问最多有多少个点在正方形内部. 思路: 按照x先排序,然后确定x在合法 ...
- Java基础知识:代理
一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是学不明白的. 动态代理技术就是用来产生一个对象的代理对 ...
- 根据word模板(contract_templet.tld)生成并下载word合同及根据wordHTML模板(contract_templetHTML.tld)预览合同内容
1.action String templete=ConstantsAppParams.CONTRACT_TEMPLET_DOC;//contract_templet.tldString temple ...
- 给iOS开发新手送点福利,简述文本属性Attributes的用法
给iOS开发新手送点福利,简述文本属性Attributes的用法 文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...
- 预装WIN8系统的电脑安装WIN7的方法
前些天,给一位客户的本本安装WIN7,因为原来预装了WIN8,结果按常规方法安装一直没有成功,不管是光盘还U盘.所以心里一直有个疑问,所以留意查阅了有关资料和相关的文章,终于明白了问题所在,现在在这里 ...
- sm4加密 解密(oc)
前几天项目用到sm4加密解密,加密为十六进制字符串,再将十六进制字符串解密.网上百度了下,sm4是密钥长度和加密明文加密密文都为16个字节十六进制数据,网上的sm4 c语言算法很容易搜到,笔者刚开始没 ...