要做出上面的小黄人脸部得用到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
如有更好办法,烦 请指点,谢谢!