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-08-02 20:06:09

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

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

iOS开发CoreAnimation解读之二--对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染         每一个UIView的对象中都有一个layer这样的属性,并且layer会负责view中有关图形绘制的相关操作,例如我们设置view的背景颜色和设置layer的背景颜色都是有效的,并且,设置view的背景色依然是通过layer来展示的,我们可以写如下的测试代码: ? 1 2 3 4 5 6 7     UIView * view 

iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程

iOS开发CoreAnimation解读之一--初识CoreAnimation核心动画编程 一.引言         众所周知,绚丽动画效果是iOS系统的一大特点,通过UIView层封装的动画,基本已经可以满足我们应用开发的所有需求,但若需要更加自由的控制动画的展示,我们就需要使用CoreAnimation框架中的一些类与方法.这里先附上前几篇与动画相关的博客地址,这一系列,我们抽出其中的CoreAnimation框架来详细解读. UIViewAnimation动画的使用:http://my.o

iOS开发CoreAnimation解读之五——高级动画技巧

iOS开发CoreAnimation解读之五--高级动画技巧 一.事务类         CoreAnimation中还有一个非常重要的类:CATransaction事物类,这个可以同时设置多个layer层的动画效果.可以通过隐式和显式两种方式来进行动画操作. 二.CATransaction属性         对layer层的属性操作,都会形成隐式动画,要使用隐式动画,需要关闭layer层的animation动画属性,使用下面的方法: ? 1 2 3 //关闭animation动画效果,开启隐

iOS开发CoreAnimation解读之四——Layer层动画内容

iOS开发CoreAnimation解读之四--Layer层动画内容 一.引言         通过前几篇博客的介绍,我们可以了解到layer层可以设置许多与控件UI相关的属性,并且对于iOS开发,UIView层的属性是会映射到CALayer的,因此,可以通过UIKit和CoreAnimation两个框架来设置控件的UI相关属性,当属性发生变化时,我们可以使其展示一个动画效果. 二.CAAnimation动画体系的介绍         CAAnimation是CoreAnimation框架中执行

iOS开发CoreAnimation解读之六——CATransform3D变换的应用

iOS开发CoreAnimation解读之五--CATransform3D变换的应用 一.引言         CATransform3D定义了一个变化矩阵,通过对矩阵参数的设置,我们可以改变layer的一些属性,这个属性的改变,可以产生动画的效果.首先,CATransform3D定义了一个4*4的矩阵,如下: ? 1 2 3 4 5 6 7 struct CATransform3D {   CGFloat m11, m12, m13, m14;   CGFloat m21, m22, m23,

iOS开发中常见的项目文件与MVC结构优化思路解析_IOS

常见的项目文件介绍 一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要用来放依赖的框架 3.test文件夹是用来做单元测试的 4.常用的文件夹(项目名称文件夹) (1)XXXinfo.plist文件(在该项目中为  01-常见文件-Info.plist) 1)简单说明 是配置文件,该文件对工程做一些运行期的配置,非常重要,不能删除. 在旧版本xcode创建的工程中,这个配置文件的名字就

比较IOS开发中常用视图的四种切换方式_IOS

在iOS开发中,比较常用的切换视图的方式主要有以下几种: 1. push.pop 使用举例(ViewController假设为需要跳转的控制器): [self.navigationController pushViewController:ViewController animated:YES]; //入栈,跳转到指定控制器视图 [self.navigationController popViewControllerAnimated:YES]; //弹栈,返回到前一个视图 [self.navig

iOS开发入门:iOS常用设计模式–委托模式

对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模式从GoF 设计装饰(Decorator).适配器(Adapter)和模板方法(Template Method)等模式演变而来.几乎每一个应用都会或多或少地使用到委托模式.不只是CocoaTouch框架,在Cocoa框架中委托模式也得到了广泛的应用. 问题提出 对于应用生命周期的非运行状态--应用启

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.       下载:https://github.com/mwaterfall/MWPhotoBrowser   目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Gith