IOS ----- QuartzD --用 代码画小黄人


要做出上面的小黄人脸部得用到Quartz2D框架

在storyboard里面拖一个view 设定其高400宽320

新建一个类Yellow , 将view 关联类名

全部在Yellow.m实现 ,代码如下

Yellow.m

//
//  Yellow.m
//  App080304小黄人
//
//  Created by Leon on 15/8/3.
//  Copyright (c) 2015年 Leon. All rights reserved.
//

#import "Yellow.h"

#define Redius 70
#define topX (rect.size.width*0.5)
#define topY (rect.size.height * 0.5 - 100)
#define LeeColor(r,g,b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:b/255.0 alpha:1.0]
@implementation Yellow

-(void)drawRect:(CGRect)rect
{
    // 上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 身体
    doawBody(ctx,rect);
    
    // 微笑
    drawSmile(ctx,rect);
    
   // 眼
    drawEye(ctx,rect);
  
}

<pre name="code" class="objc">// 身体
void doawBody(CGContextRef ctx,CGRect rect){ // 上半圆 CGContextAddArc(ctx, topX, topY, Redius, 0, M_PI, 1); // 向下延伸 CGFloat middleX = topX - Redius; CGFloat middleH = 100; CGFloat middleY = topY + middleH; CGContextAddLineToPoint(ctx, middleX, middleY); // 下半圆 CGFloat buttomX = topX; CGFloat buttomY = middleY; CGFloat buttomRedius = Redius; CGContextAddArc(ctx, buttomX, buttomY, buttomRedius, M_PI, 0, 1); // 合并路径 CGContextClosePath(ctx); [LeeColor(252, 218, 0)set]; CGContextFillPath(ctx); }

 // 微笑
void drawSmile(CGContextRef ctx,CGRect rect){ CGFloat controlX = rect.size.width * 0.5; CGFloat controlY = rect.size.height * 0.5 - 30; // 当前点 CGFloat marginX = 30; CGFloat marginY = 12; CGFloat currentX = controlX - marginX; CGFloat currentY = controlY - marginY; CGFloat endX = controlX + marginX; CGFloat endY = controlY - marginY - 5; CGContextMoveToPoint(ctx, currentX, currentY); [[UIColor blackColor]set]; CGContextAddQuadCurveToPoint(ctx, controlX, controlY, endX, endY); CGContextStrokePath(ctx);}

// 眼
void drawEye(CGContextRef ctx,CGRect rect){// 黑色绑带 CGFloat startX = rect.size.width * 0.5 - Redius; CGFloat startY = topY; CGContextMoveToPoint( ctx, startX, startY); CGFloat endX = startX + 2 * Redius; CGFloat endY = startY; CGContextAddLineToPoint(ctx, endX, endY); CGContextSetLineWidth(ctx, 15); [[UIColor blackColor]set]; CGContextStrokePath(ctx); // 眼镜框1 [LeeColor(61, 62, 66)set]; CGFloat kuangRadius = Redius * 0.4; CGFloat kuangY = startY; CGFloat kuangX = rect.size.width*0.5 - kuangRadius; CGContextAddArc(ctx, kuangX, kuangY, kuangRadius, 0, M_PI*2, 0); // CGContextSetLineWidth(ctx, 10); CGContextFillPath(ctx); // 眼镜框1 [LeeColor(61, 62, 66)set]; CGFloat rkuangX = rect.size.width*0.5 + kuangRadius; CGContextAddArc(ctx, rkuangX, kuangY, kuangRadius, 0, M_PI*2, 0); // CGContextSetLineWidth(ctx, 10); CGContextFillPath(ctx); // 里面的白色框 [[UIColor whiteColor]set]; CGFloat whiteRedius = Redius * 0.3; CGContextAddArc(ctx, kuangX, kuangY, whiteRedius, 0, M_PI*2, 0); CGContextFillPath(ctx); [[UIColor whiteColor]set]; CGContextAddArc(ctx, rkuangX, kuangY, whiteRedius, 0, M_PI*2, 0); CGContextFillPath(ctx);// 黑色眼珠 [[UIColor blackColor]set]; CGFloat blackRedius = Redius * 0.12; CGFloat blackX = kuangX - Redius * 0.18; CGContextAddArc(ctx,blackX, kuangY, blackRedius, 0, M_PI*2, 0); CGContextFillPath(ctx); [[UIColor blackColor]set]; CGFloat rblackX = rkuangX - Redius * 0.18; CGContextAddArc(ctx,rblackX, kuangY, blackRedius, 0, M_PI*2, 0); CGContextFillPath(ctx);}@end

 

如有更好办法,烦 请指点,谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值