2D画人

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 02:46   28   0



#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







分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP