博客> CAShapeLayer和贝塞尔曲线
CAShapeLayer和贝塞尔曲线
2017-09-23 03:20 评论:0 阅读:738 xiaomu
ios CAShapeLayer 贝塞尔曲线

这些天,一直在研究一些基本动效。其中CAShapeLayer和贝塞尔曲线配合使用,功能很强大,遂,今天总结了一些它们的用法,如下:

贝塞尔曲线与CAShapeLayer的关系 1,CAShapeLayer中shape代表形状的意思,所以需要形状才能生效 2,贝塞尔曲线可以创建基于矢量的路径 3,贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染。路径会闭环,所以绘制出了Shape 4,用于CAShapeLayer的贝塞尔曲线作为Path,其path是一个首尾相接的闭环的曲线,即使该贝塞尔曲线不是一个闭环的曲线

CAShapeLayer:CAShapeLayer继承自CALayer,注意: 做动效,CAShapeLayer和贝塞尔曲线 更配哦.

  1. 它依附于一个给定的path,必须给与path,而且,即使path不完整也会自动首尾相接
  2. strokeStart以及strokeEnd代表着在这个path中所占用的百分比,[0 , 1],0代表Path的开始位置,1代表Path的结束位置
  3. CAShapeLayer动画仅仅限于沿着边缘的动画效果,它实现不了填充效果 4.CAShapeLayer属于CoreAnimation框架,通过GPU来渲染图形,节省性能。动画渲染直接提交给手机GPU,不消耗内存,DrawRect属于CoreGraphic框架,占用CPU,消耗性能大

贝塞尔曲线: //根据一个矩形画曲线

  • (UIBezierPath *)bezierPathWithRect:(CGRect)rect

//根据矩形框的内切圆画曲线

  • (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect

//根据矩形画带圆角的曲线

  • (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius

//在矩形中,可以针对四角中的某个角加圆角 参数: corners:枚举值,可以选择某个角 cornerRadii:圆角的大小

  • (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii

    //以某个中心点画弧线 参数: center:弧线中心点的坐标 radius:弧线所在圆的半径 startAngle:弧线开始的角度值 endAngle:弧线结束的角度值 clockwise:是否顺时针画弧线

    • (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;

//画二元曲线,一般和moveToPoint配合使用 参数: endPoint:曲线的终点 controlPoint:画曲线的基准点

  • (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint

//以三个点画一段曲线,一般和moveToPoint配合使用 参数: endPoint:曲线的终点 controlPoint1:画曲线的第一个基准点 controlPoint2:画曲线的第二个基准点

  • (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2

// 贝塞尔曲线(创建一个圆) UIBezierPath bezierPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100 / 2.f, 100 / 2.f) radius:100 / 2.f startAngle:0 endAngle:M_PI 2 clockwise:YES];

// 创建一个shapeLayer CAShapeLayer *layer = [CAShapeLayer layer]; layer.frame = showView.bounds; // 与showView的frame一致 layer.strokeColor = [UIColor greenColor].CGColor; // 边缘线的颜色 layer.fillColor = [UIColor clearColor].CGColor; // 闭环填充的颜色 layer.lineCap = kCALineCapSquare; // 边缘线的类型 layer.path = bezierPath.CGPath; // 从贝塞尔曲线获取到形状 layer.lineWidth = 4.0f; // 线条宽度 layer.strokeStart = 0.0f; layer.strokeEnd = 0.1f;

// 将layer添加进图层
[showView.layer addSublayer:layer];
收藏
0
sina weixin mail 回到顶部