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

效果如下:

161908_1Vyx_2340880.png

三、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;

效果如下:

152354_mDh8_2340880.png

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

效果如下:

190231_b7yn_2340880.png

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

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

如下:

190626_kqnL_2340880.png

五、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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中文格式_常见中文编码格式

中文编码主要有以下四种&#xff1a;GB2312简体中文编码&#xff0c;一个汉字占用2个字节&#xff0c;在大陆是主要的编码方式。当文章/网页中包含繁体中文、日文、韩文等时&#xff0c;这些内容可能无法被正确编码。BIG5繁体中文编码&#xff0c;主要在台湾地区使用。GBK支持简…

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用

SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用 一、引言 在移动开发中&#xff0c;通常会用到一些小型的数据库进行数据管理。SQLite是一款十分小巧便捷的数据库&#xff0c;在iOS开发中&#xff0c;原生框架也对其有很好的支持。 二、SQLite常用语句 数据库…

SQL Server之字符串函数

以下所有例子均Studnet表为例&#xff1a; 计算字符串长度len&#xff08;&#xff09;用来计算字符串的长度 select sname ,len(sname) from student字符串转换为大、小写lower() 用来将一个字符串转换为小写&#xff0c;upper() 用来将一个字符串转换为大写 select lower(I …

Android通用流行框架大全

Android通用流行框架大全 1. 缓存 名称描述DiskLruCacheJava实现基于LRU的磁盘缓存2.图片加载 名称描述Android Universal Image Loader一个强大的加载&#xff0c;缓存&#xff0c;展示图片的库Picasso一个强大的图片下载与缓存的库Fresco一个用于管理图像和他们使用的内存的库…

Windows Shell 编程 第六章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987951】...

第六章 快捷方式的最短路径 Windows Shell允许存储任何对象的引用到系统范围内的任何地点。例如&#xff0c;当你从一个文件夹拖拽可执行程序到另一个文件夹时&#xff0c;鼠标自动改变形状给出除拷贝和移动文件之外的第三种选择。 除非你确定&#xff0c;否则可执行文件是不能…

ShowMsg函数妙用

为什么80%的码农都做不了架构师&#xff1f;>>> 在对DedeCMS做2次开发的时候可能提示信息会经常用到&#xff0c;为了方便在此将ShowMsg方法提取出来&#xff0c;使用方法&#xff1a;ShowMsg&#xff08;“提示信息”&#xff0c;“进行跳转的页面URL”&#xff0…

二进制文件比较

一 工具 使用Araxis Merge类似的工具来比较两个文件夹是否相同&#xff0c;比较两个二进制文件是否相同。1&#xff09; 比较两个文件夹是否相同&#xff0c;只要有文件的名字不同就认为两个文件夹不相同2&#xff09; 文件修改为新的名字后&#xff0c;二进制比较时仍与原文件…

土压力图怎么画_电气系统图怎么画?

电气系统图&#xff0c;又称为电气系统控制图&#xff0c;是通过使用国家规定的图形符号和文字代号代表各种电器、电机及元件&#xff0c;根据生产机械的要求和各种电器的原理&#xff0c;用线条代表导线连接起来&#xff0c;用于展示供电线路与各设备工作原理及其相互关系的一…

考勤助手——数据库3.0版本

基于数据库1.0及2.0版本&#xff0c;我们将细节的地方逐一进行讨论&#xff0c;设计出了数据库3.0版本。 根据ER图&#xff0c;进行基本表的设计如下&#xff1a; 转载于:https://www.cnblogs.com/GG-TEN/p/5471019.html

幽灵交易策略_幽灵交易者策略(附源代码)

NO1 . 前言正如幽灵交易者的名字&#xff0c;该策略的核心思路是&#xff0c;在真实下单交易之前&#xff0c;先虚拟出一个交易&#xff0c;如果这个虚拟的交易是亏损的&#xff0c;那么下一次才启动真实的交易。NO2 . 策略简介该策略思路源自于交易者的观察&#xff0c;交易者…

test blog

blogsdf sdfsd转载于:https://blog.51cto.com/11570194/1771304

并行编程——内存模型之缓存一致性

1 定义 缓存一致性 Cache coherence 简称 CC&#xff0c; 缓存一致性协议是在共享缓存多处理器架构确保最终一致性最突出、最重要的机制。这些协议在缓存线&#xff08;cache-line&#xff09;级别实现了对一致性的保证。缓存线是从主内存中读取数据和向内存中写入数据的缓存单…

Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)

本节通过日志文件详细分析 instance start 操作。下面是 start instance 的流程图向 nova-api 发送请求nova-api 发送消息nova-compute 执行操作下面我们详细讨论每一个步骤。 向 nova-api 发送请求客户&#xff08;可以是 OpenStack 最终用户&#xff0c;也可以是其他程序&…

失望时想起了你是什么歌_你是空你是空是什么歌 你是风你是风什么歌

“你是空&#xff0c;你是空”“你是风&#xff0c;你是风”“下起雨想起了你”前奏的歌曲最近在抖音受到很多人的喜欢&#xff0c;想要找到完整版歌词作为BGM&#xff0c;这首歌非常的洗脑&#xff0c;你是空你是空是什么歌&#xff1f;你是风什么歌&#xff1f;下面八宝网带来…

ASP.NET MVC从视图传递多个模型到Controller

从后台组织好数据然后传递到页面倒是水到渠成很方便&#xff0c;因为MVC自身就将这样的需求内建到了这个系统中。我只需要在后台组织好一个List 或IEnumerable类型的变量&#xff0c;将需要传递的数据模型扔进去便可。 比如这里我们向视图返回5条product信息在页面进行展示&…

还原virtual函数的本质-----C++

当你每次看到C类中声明一个virtual函数&#xff0c;特别是看到了一个virtual的虚构函数。你知道它的意思吗&#xff1f;你肯定会毫不犹豫的回答&#xff1a;不就是多态么。。。在运行时确定具体的行为么。。。完全正确&#xff0c;但这里我要讲的不只是这些东西。 有些类需要虚…

0511 backlog 项目管理

SCRUM 这次的作业就是确定SCRUM的计划&#xff0c;确定sprint backlog的一个冲刺周期&#xff0c;而这个周期是两个星期。争取在两周内发布1.0版本。 本次作业以网站构建为主&#xff1a; ID NAMEIMPESTHOW TO DONOTES1首页99小时用户登录网站也可以看游客的推广的内容&am…

4月27日微软云训练营活动-现场图集

1.签到 2.到场同学&#xff0c;这一天是工作日&#xff0c;但是人气依然很火。 转载于:https://www.cnblogs.com/finehappy/p/3262296.html

Java中内存中的Heap、Stack与程序运行的关系

堆和栈的内存管理 栈的内存管理是顺序分配的&#xff0c;而且定长&#xff0c;不存在内存回收问题&#xff1b;而堆 则是随机分配内存&#xff0c;不定长度&#xff0c;存在内存分配和回收的问题&#xff1b;堆内存和栈内存的区别可以用如下的比喻来看出&#xff1a;使用堆内存…

mysql 5.6 linux安装配置_linux手动安装配置mysql5.6

1.准备工作①官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/5.6.html#downloads下载之后上传到服务器。②创建linux组用户groupadd mysqluseradd -g mysql mysql2.安装①解压&#xff0c;比如放到了/usr/local/,进入到该目录下&#xff0c;进行用z解压gz包&#…