UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案

UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案,第1张

概述在view的相关方法中可直接使用UIBezierPath和CAShapeLayer画图形 - (void)makeBezierPath { /** CAShapeLayer属于QuartzCore框架,继承自CALayer。CAShapeLayer是在坐标系内绘制贝塞尔曲线的,通过绘制贝塞尔曲线,设置shape(形状)的path(路径),从而绘制各种各样的图形以及不规则图形。因此,使用CAShap @H_419_2@
在vIEw的相关方法中可直接使用UIBezIErPath和CAShapeLayer画图形
- (voID)makeBezIErPath
{ /** CAShapeLayer属于QuartzCore框架,继承自CALayer。CAShapeLayer是在坐标系内绘制贝塞尔曲线的,通过绘制贝塞尔曲线,设置shape(形状)的path(路径),从而绘制各种各样的图形以及不规则图形。因此,使用CAShapeLayer需要与UIBezIErPath一起使用。 UIBezIErPath对象(贝塞尔曲线),它是CGPathref数据类型的封装 CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类。 相对于Core Graphics绘制图片,使用CAShapeLayer有以下一些优点: 1、渲染快速。CAShapeLayer使用了硬件加速(使用cpu渲染),绘制同一图形会比用Core Graphics快很多 2、高效使用内存。一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用太多的内存 3、不会被图层边界剪裁掉。一个CAShapeLayer可以在边界之外绘制。 */    // 线的路径    UIBezIErPath *linePath = [UIBezIErPath bezIErPath]; // 起点    [linePath movetoPoint:CGPointMake(100,100)]; // 其他点    [linePath addlinetoPoint:CGPointMake(160,160)]; [linePath addlinetoPoint:CGPointMake(180,120)]; CAShapeLayer *lineLayer = [CAShapeLayer layer]; lineLayer.linewidth = 2; lineLayer.strokecolor = [UIcolor greencolor].CGcolor; lineLayer.path = linePath.CGPath; lineLayer.fillcolor = nil; // 默认为blackcolor [self.vIEw.layer addSublayer:lineLayer]; /** //绘制矩形 UIBezIErPath *path = [UIBezIErPath bezIErPathWithRect:CGRectMake(0,100,100)]; //绘制圆形路径 UIBezIErPath *path = [UIBezIErPath bezIErPathWithovalInRect:CGRectMake(0,100)]; //绘制自带圆角的路径 UIBezIErPath *path = [UIBezIErPath bezIErPathWithRoundedRect:CGRectMake(0,100) cornerRadius:30]; //指定矩形某一个角加圆角(代码示例为左上角) UIBezIErPath *path = [UIBezIErPath bezIErPathWithRoundedRect:CGRectMake(0,100) byRoundingCorners:UIRectCornertopleft cornerRadii:CGSizeMake(50,50)]; */ }
CGContextRef画图只能在vIEw的drawRect方法中,drawRect方法系统会默认创建一个上下文
-(voID)drawRect:(CGRect)rect{    [self makeline];    [self makelineTwo];}- (voID)makeline{    //注意,在drawRect方法中系统会默认创建一个上下文(C语言类型)    //下面这个方法中的rect参数会传入当前vIEw的frame    //Graphics Context是图形上下文,可以将其理解为一块画布    CGContextRef  context = UIGraphicsGetCurrentContext();    //创建路径    CGMutablePathref path =  CGPathCreateMutable();    //设置起点    CGPathMovetoPoint(path,NulL,50,150);    //设置终点    CGPathAddlinetoPoint(path,100,150);    //颜色    [[UIcolor redcolor] setstroke];    //线宽    CGContextSetlinewidth(context,5.0);    //设置连接样式    CGContextSetlineJoin(context,kCGlineJoinBevel);    //设置顶角样式    CGContextSetlineCap(context,kCGlineCapRound);    //3、把路径添加到上下文    CGContextAddpath(context,path);    //4、渲染上下文到VIEw的layer    CGContextstrokePath(context);}- (voID)makelineTwo{    //1、获取图形上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();    //2、描述路径(底层封装路径)    CGContextMovetoPoint(ctx,200,200);    CGContextAddlinetoPoint(ctx,250,250);    [[UIcolor orangecolor] setstroke];    //3、渲染上下文到VIEw的layer    CGContextstrokePath(ctx);}

https://www.jianshu.com/p/139f4fbe7b6b

https://www.jianshu.com/p/a9d39a4946a5

https://www.cnblogs.com/jaesun/p/iOS-CAShapeLayerUIBezierPath-hua-xian.html

@H_419_2@ 总结

以上是内存溢出为你收集整理的UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案全部内容,希望文章能够帮你解决UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存