绘图操作必须在 - (void)drawRect:(CGRect)rect
函数进行,即要重写父类的此方法。
本文绘图内容:
- 线条/虚线
- 长方形/正方形
- 椭圆/圆
- 三角形
- 五角星
Objective-C 版本
- (void)drawRect:(CGRect)rect {
// 获取绘图上下文
CGContextRef context = UIGraphicsGetCurrentContext();
if (!context) {
NSLog(@"获取绘图context失败");
return;
}
/** ==== 对context进行基本设置 */
CGContextSetLineWidth(context, 2); // 数值越大,绘出来的路径越大
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); // 路径颜色
CGContextSetLineCap(context, kCGLineCapRound); // 路径起点/终点处显示风格
CGContextSetLineJoin(context, kCGLineJoinRound); // 路径连接(拐弯)处显示风格
// 画一条直线
CGContextMoveToPoint(context, 50, 40);
CGContextAddLineToPoint(context, 250, 40);
CGContextStrokePath(context); // 输出到屏幕上
// 画一个正方形/长方形,并输出到屏幕上
CGContextStrokeRect(context, CGRectMake(50, 50, 100, 50)); // 长方形
CGContextStrokeRect(context, CGRectMake(200, 50, 100, 100)); // 正方形
// 画一个椭圆/圆形,并输出到屏幕上
CGContextStrokeEllipseInRect(context, CGRectMake(50, 160, 100, 50)); // 椭圆
CGContextStrokeEllipseInRect(context, CGRectMake(220, 160, 100, 100)); // 圆
// 画一个三角形
CGPoint points[4];
points[0] = CGPointMake(40, 300);
points[1] = CGPointMake(80, 220);
points[2] = CGPointMake(120, 300);
points[3] = CGPointMake(40, 300);
CGContextAddLines(context, points, 4);
CGContextStrokePath(context); // 输出到屏幕上
// 画一条虚线
CGFloat lengths[] = {5, 10};
CGContextSetLineDash(context, 0, lengths, 2);
CGContextMoveToPoint(context, 50, 320);
CGContextAddLineToPoint(context, 250, 320);
CGContextStrokePath(context); // 输出到屏幕上
// 画个五角星(需要到圆、三角函数的知识,忘记数学知识的话,先去温习一下)
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGPoint centerPoint=CGPointMake(160, 430); // 确定中心点
CGFloat radius=50.0; // 确定半径
CGPoint point1=CGPointMake(centerPoint.x, centerPoint.y-radius); // 五角星到顶点
CGContextMoveToPoint(context, point1.x, point1.y);
//五角星每个点之间点夹角,采用弧度计算。每两个点进行连线就可以画出五角星
//点与点之间点夹角为2*M_PI/5.0,
CGFloat angle=4*M_PI/5.0;
for (int i=1; i<=5; i++) {
CGFloat x=centerPoint.x-sinf(i*angle)*radius;
CGFloat y=centerPoint.y-cosf(i*angle)*radius;
CGContextAddLineToPoint(context, x, y);
}
// 输出到屏幕上
CGContextDrawPath(context, kCGPathFill); // 只填充
//CGContextDrawPath(context, kCGPathEOFill); // 只填充(但闭合路径重叠的地方除外)
//CGContextDrawPath(context, kCGPathStroke); // 只显示路径
//CGContextDrawPath(context, kCGPathFillStroke);// 填充并显示路径
//CGContextDrawPath(context, kCGPathEOFillStroke);// 填充(但闭合路径重叠的地方除外)并显示路径
}
Swift 版本
comeing soon
还不快抢沙发