IOS--Quartz2D绘图绘制小黄人

学习了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

210035_DzWm_2454190.png

转载于:https://my.oschina.net/zhangqy/blog/507839

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值