UIBeaierPath 与 CAShapeLayer

CAShapeLayer是基于贝塞尔曲线而存在的, 如果没有贝塞尔曲线提供路径来画出图形, CAShapeLayer就没有存在的意义, CAShapeLayer可以使得不用在   drawRect:方法中实现画图.

另外, CAShapeLayer是属于CoreAnimation框架的, 是基于GPU的来进行渲染的,

         不比使用CoreGraphic框架, 是基于CPU来渲染的, 所以CAShapeLayer效率相对比较高一些

下面我简单的使用CAShapeLayer和贝塞尔曲线画了矩形和椭圆形,

// 矩形(正方形)
- (void)createRect
{
    // 创建矩形贝塞尔曲线路径
    UIBezierPath *rect = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 20, 30)];

    // 创建CAShapeLayer
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    // 设置尺寸
    shapeLayer.frame         = CGRectMake(0, 0, 100, 200);
    // 设置位置
    shapeLayer.position      = self.view.center;
    // 填充颜色
    shapeLayer.fillColor     = [UIColor whiteColor].CGColor;
    // 路径颜色(边框)
    shapeLayer.strokeColor   = [UIColor blackColor].CGColor;

    // 关联
    shapeLayer.path = rect.CGPath;

    // 显示
    [self.view.layer addSublayer:shapeLayer];
}

// 椭圆(圆)
- (void)createOval
{
    // 创建椭圆形贝塞尔曲线路径
    UIBezierPath *oval = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 200, 200)];

    // 创建CAShapeLayer
    CAShapeLayer *shapeLayer    = [CAShapeLayer layer];
    // 设置尺寸,
    shapeLayer.frame            = CGRectMake(0, 0, 200, 200);
    // 设置位置(设置的是shapeLayer的中心点位置)
    shapeLayer.position = self.view.center;
    // 设置背景颜色
    shapeLayer.backgroundColor  = [UIColor greenColor].CGColor;
    // 设置填充颜色(注意, 这里不是设置背景颜色)
    shapeLayer.fillColor        = [UIColor redColor].CGColor;
    // 设置边框颜色(路径颜色)
    shapeLayer.strokeColor      = [UIColor blueColor].CGColor;

    // 关联ShapeLayer和贝塞尔曲线
    shapeLayer.path = oval.CGPath;

    // 显示
    [self.view.layer addSublayer:shapeLayer];

}
时间: 2024-10-25 09:12:32

UIBeaierPath 与 CAShapeLayer的相关文章

CAShapeLayer使用

UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:showView]; showView.backgroundColor = [UIColor whiteColor]; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100 / 2.f, 100

CAShapeLayer的path动画

效果 源码 https://github.com/YouXianMing/Animations // // CAShapeLayerPathController.m // Animations // // Created by YouXianMing on 15/11/17. // Copyright © 2015年 YouXianMing. All rights reserved. // #import "CAShapeLayerPathController.h" #import &

用CAShapeLayer写股市K线图动画效果

说明 入市有风险,炒股需谨慎.(因项目需求,本人提供了写这种效果的源码) 效果 源码 // // ViewController.m // Path // // Created by YouXianMing on 15/5/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (non

[控件] 动态实时设置CAShapeLayer贝塞尔曲线的坐标点

动态实时设置CAShapeLayer贝塞尔曲线的坐标点 效果图: 源码: PathDirectionView.h 与 PathDirectionView.m // // PathDirectionView.h // Path // // Created by XianMingYou on 15/2/27. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> #import &qu

iOS学习:CAShapeLayer与UIBezierPath动画

CAShapeLayer与UIBezierPath动画: CAShapeLayer与UIBezierPath的动画,就离不开 CABasicAnimation:也将会使用到 strokeEnd.strokeStart.lineWidth 三个属性: 先做一条贝塞尔曲线: UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(40, 80)]; [path addCurveToPoint:CGPo

粒子效果 QQ粘性布局 (CAShapeLayer形状图层)

CAShapeLayer 可以根据一个路径生成一个形状: 1.基本功能的实现:(1)添加一个button:自定义button,创建一个类:绑定按钮:(2)在自定义的button类中,在awakeFromNib中对这个按钮进行初始化:设置圆角,背景颜色,字体颜色,字体大小:(3)调用取消高亮状态的方法:-setHightLighted:(4)awakeFromNib添加pan手势,(5)在pan方法中:获取偏移量:修改self.transform=CGAffine...:进行复位操作:(6)在aw

iOS关于CAShapeLayer与UIBezierPath的知识内容

使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个OC封装.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc)来创建复杂的曲线形状.每一个直线段或者曲线段的结束的地方是下一个的开始的地方.每一个连接的直线或者曲线段的集

IOS开发基础篇--CAShapeLayer的strokeStart和strokeEnd属性

http://blog.csdn.net/yixiangboy/article/details/50662704 一.案例演示 最近有一个小需求,就是要做一个圆形进度条,大概样子如下: . 在不知道有CAShapeLayer的strokeStart和strokeEnd属性的时候,我采取的方法就是实时的 移除旧的CAShapeLayer 然后重绘这个圆形的CAShapeLayer.显然这种方式的效率是不高的.后来在一次看别人Demo的时候,发现别人使用了CAShapeLayer的strokeSta

CAShapeLayer

一 简介 1,CAShapeLayer继承至CALayer,可以使用CALayer的所有属性 2,CAShapeLayer需要与贝塞尔曲线配合使用才有意义:单独使用毫无意义 3,使用CAShapeLayer与贝塞尔可以实现不在view的drawRect方法中画出一些想要的图形: 4,CAShapeLayer属于Core  Animation框架,其动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高, 能大大优化内存使用情况. drawRect