ios绘图一: CoreGraphics 绘图

4 篇文章 0 订阅
3 篇文章 0 订阅

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
    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值