UIBezierPath 绘图:iOS绘图二,Layer绘制不再介绍详见:iOS 绘图三
整理下以往绘图的内容~~,直接上代码:
- (void)drawRect:(CGRect)rect {
CGFloat width = rect.size.width;
CGFloat height = rect.size.height;
CGContextRef context = UIGraphicsGetCurrentContext();
//事件处理(必须在绘制路线之前设置才有效)
CGContextScaleCTM(context, 0.5, 0.5); //缩放,左上角位置不变,图层缩放
CGContextRotateCTM(context, M_PI/4); //绕左下角旋转
CGContextTranslateCTM(context, 20, 20);//向右下平移
CGContextSetFillColorWithColor(context, [UIColor purpleColor].CGColor);//填充颜色,实心色
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);//渲染颜色,外围线条色
CGContextSetLineWidth(context, 3);//外围线条宽度
//画圆(实心圆)
CGContextAddArc(context,60, 60, 40, 0, 2*M_PI,0);
CGContextFillPath(context);
//一个路径不能同时fill 和storke,也就是说不能实心填充同时渲染线条,可以在绘制一次渲染线条
//渲染线条(空心圆)
CGContextAddArc(context,60, 60,40, 0, 2*M_PI,0);
CGContextStrokePath(context);
//绘制圆弧
CGContextAddArc(context,100, 100,40, 0, M_PI/4,0);
CGContextStrokePath(context);
//画直线
CGContextMoveToPoint(context, 100, 100); //移动到初始点,没有这句代码,会默认从上次截止点开始绘条直线过来
CGContextAddLineToPoint(context, 100, 120);
CGContextAddLineToPoint(context, 120, 120);
CGContextSetLineWidth(context, 8);//线条宽度
/*
拐点样式设置
kCGLineJoinMiter,//正常样式,默认
kCGLineJoinRound,//圆角
kCGLineJoinBevel //和Miter长一点,距离为线宽的1/2。
*/
CGContextSetLineJoin(context, kCGLineJoinRound);
/*
端点样式设置
kCGLineCapButt,//正常样式,默认
kCGLineCapRound,//圆角
kCGLineCapSquare //切脚
*/
CGContextSetLineCap(context, kCGLineCapRound);
CGContextStrokePath(context);
//画矩形
CGContextAddRect(context,rect);
CGContextStrokePath(context);
//三角形
CGContextMoveToPoint(context, 100, 150);
CGContextAddLineToPoint(context, 100, 260);
CGContextAddLineToPoint(context, 200, 260);
CGContextClosePath(context);//闭合直线路径(合并点按拐点样式显示)
// CGContextAddLineToPoint(context, 100, 150);//(合并点按端点样式显示)
CGContextSetLineJoin(context, kCGLineJoinMiter);
CGContextStrokePath(context);
//椭圆
CGContextAddEllipseInRect(context, CGRectMake(80, 80, 200, 100));
CGContextStrokePath(context);
// 两条切线加圆角过度(角度过大切线会显示出来,过小显示出来的切线会造成圆弧变粗的效果)
CGContextMoveToPoint(context, 0, height/2);
CGContextAddArcToPoint(context,0, 0,width/2,0,90);//注意这块是角度不是弧度
CGContextAddLineToPoint(context, width/2, 0);
CGContextClosePath(context);
CGContextSetLineWidth(context, 4);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextStrokePath(context);
//注意:只能绘制在当前rect范围内,其他不显示,要想绘制超出范围的可以通过CAShapeLayer绘制添加到当前layer
}