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

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

一、CAEmitterLayer

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

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

二、CAGradientLayer

CAGradientLayer是用于色彩梯度展示的layer图层,通过CAGradientLayer,我们可以很轻松的创建出有过渡效果的色彩图。其中属性如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

/*

颜色数组,设置我们需要过的的颜色,必须是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;

用如下代码创建一个度过视图的效果:

?


1

2

3

4

5

6

7

8

    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];

效果如下:

三、CAReplicatorLayer

CAReplocatorLayer是拷贝视图容器,我们可以通过它,将其中的子layer进行拷贝,并进行一些差异处理,其中常用属性方法如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

//拷贝的次数

@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;

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

    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;

效果如下:

四、CAShapeLayer

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

?


1

@property(nullable) CGPathRef path;

path属性为CAShapeLayer设置一个边界路径,例如我们可以创建一个三角形的路径通过如下代码:

?


1

2

3

4

5

6

7

8

    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;

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

//设置图形的填充颜色

@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;

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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];

效果如下:

除此之外,我们还可以设置边界的线条为虚线,通过下面两个属性:

?


1

2

3

4

5

6

7

    //设置线段的宽度为5px 间距为10px

    /*

    这个数组中还可以继续添加,会循环进行设置 例如 5 2 1 3 则第一条线段5px,间距2px,第二条线段1px 间距3px再开始第一条线段

    */

    layer.lineDashPattern = @[@05,@10];

    //设置从哪个位置开始

    layer.lineDashPhase =5;

如下:

五、CATextLayer

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

//渲染的文字字符串

@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;

时间: 2024-10-15 13:50:31

iOS开发CoreAnimation解读之三——几种常用Layer的使用解析的相关文章

iOS开发CoreAnimation解读之二——对CALayer的分析

iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二.几种系统的Layer类 1.CAEmitterLayer 2.CAGradientLayer 3.CAEAGLLayer 4.CAReplicatorLayer 5.CAScrollLayer 6.CAShapeLayer 7.CATextLayer 8.CATiledLayer 9.CATrans

IOS开发隐藏键盘的4种方法

IOS开发隐藏键盘的4种方法 开发的app中常会用到键盘输入完成后隐藏键盘的情况.在此总结了4种方法来实现我们的目的. 方法一--delegate方式 第一种隐藏键盘的方法,称为delegate三步法: 1. 遵循(委托/代理); 2. 调用; 3. 关联头文件(ViewController.h)中遵循代理 . 代码如下: #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDel

iOS开发——动画编程的几种方法

动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKeyframeAnimation>,NSTimer 这里我就总结了一下这五种方法,其实iOS开发中动画的编程都会在这里面变化,所以只要弄懂了这些动画编程就不难了. 一:UIView动画 一般方式 [UIView beginAnimations:@"ddd" context:nil];//设置动画[

自学iOS开发小功能之三:弹框的两种方式(iOS8.3之后新的方式,之前的已经弃用)

1.弹框出现在屏幕中间位置 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否退出" preferredStyle: UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActio

iOS开发基础之用三种不同方式创建Table View应用

在iOS中,有一种最常见的控件就是Table View,你也可以理解为是一个列表.在安卓中就是一个ListView.常常用在新闻客户端,邮箱,备忘录等应用上.但是在iOS实现这个列表项比Android更为简单.下面将会使用三种方法来实现一个Table View的界面. (1)模板Master-Detail Application 这是在创建一个iOS应用的时候可以选择的模板,里面已经非常好的集成了Table View控件,已经可以实现增加一项,删除一项,信息显示的功能了.我们可以在这个基础上进行

iOS开发——底层OC篇&amp;运行时常用

运行时常用 什么是Runtime(前面的文章已经说的很清楚了,这里就简单的介绍一下) 我们写的代码在程序运行过程中都会被转化成runtime的C代码执行,例如[target doSomething];会被转化成objc_msgSend(target, @selector(doSomething));. OC中一切都被设计成了对象,我们都知道一个类被初始化成一个实例,这个实例是一个对象.实际上一个类本质上也是一个对象,在runtime中用结构体表示. 相关的定义: 1 /// 描述类中的一个方法

ios开发——实用技术总结Swift篇&amp;swift常用开发技术总结

swift常用开发技术总结 懒加载:属性,数组(字典),控件... 数组(懒加载): 1 lazy var shops:Array<Dictionary<String, String>> = { 2 3 return [ 4 5 [ 6 7 "icon" : "danjianbao", 8 9 "name" : "单肩包" 10 11 ], 12 13 [ 14 15 "icon"

【iOS开发-99】POST四种数据提交方式以及NSURLSession上传任务的一些知识

(1)POST四种数据提交方式 --Content-Type:application/x-www-form-urlencoded,提交的数据格式就是key1=value1&key2=value2的方式. NSURL *url=nil; NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f]; NSString *str=[NSString st

iOS开发效率之为Xcode添加常用的代码片段

tableview是我们经常使用的控件,而使用tableview控件需要自己去实现一些基本的tableview的代理.这些对于每个程序基本上都是大同小异.对于声明property来说也是我们经常需要做的工作.所以我们需要把这些公用的东西总结成代码块,供我们以后的快捷使用. 具体步骤如下: 1.将我们需要重复使用的代码块全部选中拖到下图右下角的libray里面去. 2.这时候会弹出一个对话框需要我们填入一些基本信息 从上到下依次是: Title 代码片段的标题 Summary 代码片段的描述文字