iOS开发CoreAnimation解读之三——几种经常使用Layer的使用解析

iOS开发CoreAnimation解读之三——几种经常使用Layer的使用解析

1、CAEmitterLayer

        CAEmitterLayer是CoreAnimation框架中的粒子发射层,在之前的一片博客中有详细的介绍和范例,这里再也不重复,地址以下:数组

粒子效果的应用和火焰范例:http://my.oschina.net/u/2340880/blog/485095app

2、CAGradientLayer

        CAGradientLayer是用于色彩梯度展现的layer图层,经过CAGradientLayer,咱们能够很轻松的建立出有过渡效果的色彩图。其中属性以下:框架

/*
颜色数组,设置咱们须要过的的颜色,必须是CGColor对象
*/
@property(nullable, copy) NSArray *colors;
/*
颜色开始进行过渡的位置
这个数组中的元素是NSNumber类型,单调递增的,而且在0——1之间
例如,若是咱们设置两个颜色进行过渡,这个数组中写入0.5,则第一个颜色会在达到layer一半的时候开始向第二个颜色过渡
*/
@property(nullable, copy) NSArray<NSNumber *> *locations;
/*
下面两个参数用于设置渲染颜色的起点和终点 取值范围均为0——1
默认起点为(0.5 ,0) 终点为(0.5 ,1),颜色的过渡范围就是沿y轴从上向下
*/
@property CGPoint startPoint;
@property CGPoint endPoint;
/*
渲染风格 iOS中只支持一种默认的kCAGradientLayerAxial,咱们无需手动设置
*/
@property(copy) NSString *type;

用以下代码建立一个度过视图的效果:字体

    CAGradientLayer * layer = [CAGradientLayer layer];
    layer.colors = @[(id)[UIColor redColor].CGColor,(id)[UIColor blueColor].CGColor,(id)[UIColor greenColor].CGColor];
    layer.locations = @[@0.1,@0.7,@1];
    layer.bounds = CGRectMake(0, 0, 100, 100);
    layer.position = CGPointMake(100, 100);
    layer.startPoint = CGPointMake(0, 0);
    layer.endPoint = CGPointMake(1, 1);
    [self.view.layer addSublayer:layer];

效果以下:动画

3、CAReplicatorLayer

        CAReplocatorLayer是拷贝视图容器,咱们能够经过它,将其中的子layer进行拷贝,并进行一些差别处理,其中经常使用属性方法以下:spa

//拷贝的次数
@property NSInteger instanceCount;
//是否开启景深效果
@property BOOL preservesDepth;
//当CAReplicatorLayer的子Layer层进行动画的时候,拷贝的副本执行动画的延时
@property CFTimeInterval instanceDelay;
//拷贝副本的3D变换
@property CATransform3D instanceTransform;
//拷贝副本的颜色变换
@property(nullable) CGColorRef instanceColor;
//每一个拷贝副本的颜色偏移参数
@property float instanceRedOffset;
@property float instanceGreenOffset;
@property float instanceBlueOffset;
//每一个拷贝副本的透明度偏移参数
@property float instanceAlphaOffset;

例如,经过拷贝一个色块,使其产平生移排列:.net

    CAReplicatorLayer *reLayer = [CAReplicatorLayer layer];
    reLayer.position = CGPointMake(0, 0);
    CALayer * layer= [CALayer layer];
    [reLayer addSublayer:layer];
    [self.view.layer addSublayer:reLayer];
    layer.bounds = CGRectMake(0, 0, 20, 20);
    layer.position = CGPointMake(30, 100);
    layer.backgroundColor = [UIColor redColor].CGColor;
    //每一个副本向右平移25px
    reLayer.instanceTransform=CATransform3DMakeTranslation(25, 0, 0);
    //若是进行动画,副本延时一秒执行
    reLayer.instanceDelay = 1;
    //拷贝十个副本
    reLayer.instanceCount = 10;

效果以下:code

4、CAShapeLayer

        CAShapeLayer是图形layer层,咱们能够自定义这个层的形状。先来看其中咱们能够使用的属性和方法:orm

@property(nullable) CGPathRef path;

path属性为CAShapeLayer设置一个边界路径,例如咱们能够建立一个三角形的路径经过以下代码:对象

    CAShapeLayer * layer = [CAShapeLayer layer];
    layer.position=CGPointMake(0,0);
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, 0, 100, 100);
    CGPathAddLineToPoint(path, 0, 300, 100);
    CGPathAddLineToPoint(path, 0, 200, 200);
    CGPathAddLineToPoint(path, 0, 100, 100);
    layer.path=path;

仅仅有路径,不能将咱们想要的形状画出来,下面一些属性能够对图形的一些基础属性进行设置:

//设置图形的填充颜色
@property(nullable) CGColorRef fillColor;
/*
设置图形的填充规则 选项以下:
非零填充
 NSString *const kCAFillRuleNonZero;
 奇偶填充
 NSString *const kCAFillRuleEvenOdd;
*/
@property(copy) NSString *fillRule;
//设置线条颜色
@property(nullable) CGColorRef strokeColor;
//设置线条的起点与终点 0-1之间
@property CGFloat strokeStart;
@property CGFloat strokeEnd;
//设置线条宽度
@property CGFloat lineWidth;
//设置两条线段相交时锐角斜面长度
@property CGFloat miterLimit;
/*
设置线条首尾的外观
可选参数以下
无形状
 NSString *const kCALineCapButt;
 圆形
 NSString *const kCALineCapRound;
 方形
 NSString *const kCALineCapSquare;
*/
@property(copy) NSString *lineCap;
/*
设置线段的连接方式
棱角
 NSString *const kCALineJoinMiter;
 平滑
 NSString *const kCALineJoinRound;
 折线
 NSString *const kCALineJoinBevel;
*/
@property(copy) NSString *lineJoin;

修改一下上面的代码,以下:

CAShapeLayer * layer = [CAShapeLayer layer];
    layer.position=CGPointMake(0,0);
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, 0, 100, 100);
    CGPathAddLineToPoint(path, 0, 300, 100);
    CGPathAddLineToPoint(path, 0, 200, 200);
    CGPathAddLineToPoint(path, 0, 100, 100);
    layer.path=path;
    layer.fillColor= [UIColor redColor].CGColor;
    layer.fillRule = kCAFillRuleEvenOdd;
    layer.strokeColor = [UIColor blueColor].CGColor;
    layer.strokeStart =0;
    layer.strokeEnd =0.5;
    layer.lineWidth = 5;
    layer.miterLimit = 1;
    layer.lineJoin = kCALineJoinMiter;
    [self.view.layer addSublayer:layer];

效果以下:

除此以外,咱们还能够设置边界的线条为虚线,经过下面两个属性:

    //设置线段的宽度为5px 间距为10px
    /*
    这个数组中还能够继续添加,会循环进行设置 例如 5 2 1 3 则第一条线段5px,间距2px,第二条线段1px 间距3px再开始第一条线段
    */
    layer.lineDashPattern = @[@05,@10];
    //设置从哪一个位置开始
    layer.lineDashPhase =5;

以下:

5、CATextLayer

        CATextLayer能够进行文本的绘制,属性方法以下:

//渲染的文字字符串
@property(nullable, copy) id string;
//设置字体
@property(nullable) CFTypeRef font;
//设置字号
@property CGFloat fontSize;
//设置文字颜色
@property(nullable) CGColorRef foregroundColor;
//是否换行
@property(getter=isWrapped) BOOL wrapped;
/*
设置截断模式
 NSString * const kCATruncationNone;
 截断前部分
 NSString * const kCATruncationStart;
 截断后部分
 NSString * const kCATruncationEnd;
 截断中间
 NSString * const kCATruncationMiddle;
*/
@property(copy) NSString *truncationMode;
/*
设置文字对齐模式
 NSString * const kCAAlignmentNatural;
 NSString * const kCAAlignmentLeft;
 NSString * const kCAAlignmentRight;
 NSString * const kCAAlignmentCenter;
 NSString * const kCAAlignmentJustified;
*/
@property(copy) NSString *alignmentMode;

专一技术,热爱生活,交流技术,也作朋友。

——珲少 QQ群:203317592

相关文章
相关标签/搜索