|

#import <UIKit/UIKit.h>
@interfaceHumanView :
UIView
@end
#import "HumanView.h"
#define TopX rect.size.width * 0.5
#define TopY 150
#define TopRadius 80
@implementation NJHumanView
- (void)drawRect:(CGRect)rect
{
// 1.获取上下文
CGContextRef ctx =
UIGraphicsGetCurrentContext();
// 画身体
[self
drawBody:rect context:ctx];
// 画眼镜
[self
drawEyes:rect context:ctx];
// 画嘴
[self
drawMouth:rect context:ctx];
}
- (void)drawMouth:(CGRect)rect context:(CGContextRef)ctx
{
// 控制点
CGFloat controllerX =
TopX;
CGFloat controllerY = rect.size.height *
0.5 + 50;
// 当前点
CGFloat maginX =
20;
CGFloat maginY =
10;
CGFloat currentX = controllerX - maginX;
CGFloat currentY = controllerY - maginY;
CGContextMoveToPoint(ctx, currentX, currentY);
// 结束点
CGFloat endX = controllerX + maginX;
CGFloat endY = currentY;
// cpx/cpy
是控制点的位置
// x/y
是结束点的位置
CGContextAddQuadCurveToPoint(ctx, controllerX, controllerY, endX, endY);
// 重新设置嘴的宽度
CGContextSetLineWidth(ctx,
1);
// 重新设置颜色
[[UIColor
blackColor] set];
CGContextStrokePath(ctx);
}
- (void)drawEyes:(CGRect)rect context:(CGContextRef)ctx
{
// 画眼镜
CGFloat startX =
TopX - TopRadius;
CGFloat startY =
TopY;
// 设置起点
CGContextMoveToPoint(ctx, startX, startY);
// 设置终点
CGFloat endX =
TopX + NJTopRadius;
CGFloat endY = startY;
CGContextAddLineToPoint(ctx, endX, endY);
// 设置线条宽度
CGContextSetLineWidth(ctx,
18);
// 重新设置颜色
[[UIColor
blackColor] set];
CGContextStrokePath(ctx);
// 画眼睛
// CGContextAddEllipseInRect(ctx, CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>))
// 画大眼睛
CGFloat leftRadius =
30;
CGFloat leftX =
TopX - leftRadius;
CGFloat leftY =
TopY;
CGContextAddArc(ctx, leftX, leftY, leftRadius,
0, 2 *
M_PI, 0);
CGContextFillPath(ctx);
// 画二眼睛
CGFloat leftSmallRadius =
20;
CGFloat leftSmallX = leftX;
CGFloat leftSmallY = leftY;
CGContextAddArc(ctx, leftSmallX, leftSmallY, leftSmallRadius,
0, 2 *
M_PI, 0);
[[UIColor
whiteColor] set];
CGContextFillPath(ctx);
}
- (void)drawBody:(CGRect)rect context:(CGContextRef)ctx
{
// 2.绘制图形
// 画上半圆弧
CGFloat topX =
TopX;
CGFloat topY =
TopY;
CGFloat topRadius =
TopRadius;
CGContextAddArc(ctx, topX, topY, topRadius, -M_PI,
0, 0);
// 画身体直线
CGFloat middX = topX + topRadius;
CGFloat middY = topY +
150;
CGContextAddLineToPoint(ctx, middX, middY);
// 画下半圆弧
CGFloat bottomRadius = topRadius;
CGFloat bottomX = topX;
CGFloat bottomY = middY;
CGContextAddArc(ctx, bottomX, bottomY, bottomRadius,
0, M_PI,
0);
// 关闭路径
CGContextClosePath(ctx);
// 3.渲染图形
[[UIColor
colorWithRed:252/255.0
green:218/255.0
blue:0
alpha:1.0]
set];
CGContextFillPath(ctx);
}
@end
|