文档章节

IOS--Quartz2D绘图绘制小黄人

fengyun321
 fengyun321
发布于 2015/09/17 21:01
字数 342
阅读 42
收藏 1

学习了Quartz2D后,练习着画了个简单的小黄人,分享一下代码

自定义一个继承于UIView的视图,调用drawRect方法:

#import "HumenView.h"
#define color(r,g,b)     [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]

@implementation HumenView


- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    //身体
    //上半圆
    CGFloat topCicleX = rect.size.width/2;
    CGFloat topCicleY = 150;
    CGFloat topradius = 70;
    CGContextAddArc(ctx, topCicleX, topCicleY, topradius, 0,M_PI, 1);
    
    //向下延伸
    CGFloat middleX = topCicleX - topradius;
    CGContextAddLineToPoint(ctx, middleX, topCicleY + 100);
    CGContextAddArc(ctx, topCicleX, topCicleY + 100, topradius, M_PI, 0, 1);
    
    CGContextClosePath(ctx);

    //设置颜色
    [color(252, 218, 0)setFill];
    CGContextFillPath(ctx);

    //画嘴 控制点
    CGFloat controlX = rect.size.width/2;
    CGFloat controlY = rect.size.height/3;
    CGFloat marginX = 30;
    CGFloat marginY = 20;
    
    
    CGFloat currentX = controlX - marginX;
    CGFloat currentY = controlY - marginY;
    CGContextMoveToPoint(ctx, currentX, currentY);
    
    
    CGFloat endX = controlX + marginX;
    CGFloat endY = currentY;
    [[UIColor blackColor]set];

    CGContextAddQuadCurveToPoint(ctx, controlX, controlY, endX, endY);
    
    CGContextStrokePath(ctx);
    
    //画眼睛
    //绑带
    CGContextMoveToPoint(ctx, middleX, topCicleY);
    CGContextAddLineToPoint(ctx, middleX+topradius*2, topCicleY);
    CGContextSetLineWidth(ctx, 20);
    [[UIColor blackColor]setStroke];
    CGContextStrokePath(ctx);
    
    //最外的镜框
    CGFloat radius = topradius *0.4;
    CGFloat kuangX = topCicleX - radius;
    CGFloat kuangY = topCicleY;
    
    //左边
    CGContextAddArc(ctx, kuangX, kuangY, radius, 0, M_PI*2, 1);
  [[UIColor lightGrayColor]set];
    CGContextFillPath(ctx);
    
    // 右边
    CGContextAddArc(ctx, topCicleX + radius, kuangY, radius, 0, M_PI*2, 1);
    [[UIColor lightGrayColor]set];
    CGContextFillPath(ctx);
    
    //白色镜框
    
    CGContextAddArc(ctx, topCicleX - radius, kuangY, radius*0.7, 0, M_PI*2, 1);
    [[UIColor whiteColor]set];
    CGContextFillPath(ctx);
    
    CGContextAddArc(ctx, topCicleX + radius, kuangY, radius*0.7, 0, M_PI*2, 1);
    [[UIColor whiteColor]set];
    CGContextFillPath(ctx);
    //眼珠
    CGFloat eyeRadius = 10;
    CGFloat eyeX = topCicleX - eyeRadius - 10;
    CGFloat eyeY = kuangY;
    
    CGContextAddArc(ctx, eyeX, eyeY, eyeRadius, 0, M_PI*2, 1);
    [color(66,25,11)set];
    CGContextFillPath(ctx);
    CGContextAddArc(ctx, topCicleX + eyeRadius + 10, eyeY, eyeRadius, 0, M_PI*2, 1);
    [color(66,25,11)set];
    CGContextFillPath(ctx);

}
@end

© 著作权归作者所有

fengyun321
粉丝 3
博文 31
码字总数 16462
作品 0
海淀
程序员
私信 提问
加载中

评论(0)

iPhone之Quartz 2D系列--图形上下文(2)Graphics Contexts

以下几遍关于Quartz 2D博文都是转载自:http://www.cocoachina.com/bbs/u.php?action=topic&uid=38018 有关本章博客的代码实现,大家可以参考我的这遍博客:IOS用CGContextRef画各种图形(文字...

长平狐
2013/12/25
94
0
iOS开发-Quartz2D补充

今天给同学们全面的讲解Quartz2D以及Quartz2D的相关实战例子:例子请参考我个人CSDN之前所发的有关Quartz2D的项目的博文,那么废话不多说,直接上代码~ http://blog.csdn.net/ZZIOSdeveloper -...

zz_iosdeveloper
2018/05/06
0
0
iOS之QuartZ 2D 绘图(一)

Quartz2D Quartz2D是苹果封装的一个库,针对iOS和os系统绘制不同的类型的制图方式 图形上下文(一种数据类型,类似int,double)数据类型() 不同的(数据类型)可以绘制不同的类型(,,,,) 进而上面5...

追逐iOS
2019/05/21
0
0
iOS的绘图机制-iOS,iPad,iPhone,Objective-c

嘿!我又回来了。 在前面我介绍了iOS的视图机制,我也提到了iOS的视图框框可以通过drawRect自己绘图,我也说过每个view的layer(CALayer)就像一个视图的投影,其实我们也可以来操作它定制一...

晨曦之光
2012/05/28
3K
0
iOS开发系列--打造自己的“美图秀秀”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/47753221 --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,...

KenshinCui
2015/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

南宁哪里可以开劳务费发票-中国-新闻网

南宁哪里可以开劳务费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17095420210
22分钟前
43
0
0228 我的潘多拉

我的潘多拉 从一个故事说起。<br />从前,有个Java程序员非常喜欢写程序,喜欢研究源码,读英文文档。但是它在一家小公司里工作,公司的技术栈很陈旧。<br /> <br />单个系统代码中含有很多的...

李福春carter
今天
18
0
OSChina 周六乱弹 —— 屁会不会传染病毒

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《ハレハレヤ(朗朗晴天)》- 猫瑾 手机党少年们想听歌,请使劲儿戳(这里) @空格...

小小编辑
今天
77
1
两个值得注意的问题

对成员变量的操作只能放在方法中,方法可以对成员变量和方法体中自己定义的局部 变量进行操作.在定义类的成员变量时可以同时赋予初值,如 class A { int a=12; float b=12.56f; } 但是不可以这...

咔啡
今天
27
0
第三章 分布式服务框架的选择

1.大项目工程且多人维护的弊端 (1)项目团队协同成本高,业务响应越来越慢 (2)应用复杂度已超出人的认知负载(向杂乱的电线一样) (3)错误难于隔离(一个模块出错,整个系统挂掉) (4...

zxx901221
今天
68
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部