#import <UIKit/UIKit.h>
@interface HumanView : 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
1316

被折叠的 条评论
为什么被折叠?



