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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

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;

目录
相关文章
|
1月前
|
开发框架 供应链 监控
并行开发模型详解:类型、步骤及其应用解析
在现代研发环境中,企业需要在有限时间内推出高质量的产品,以满足客户不断变化的需求。传统的线性开发模式往往拖慢进度,导致资源浪费和延迟交付。并行开发模型通过允许多个开发阶段同时进行,极大提高了产品开发的效率和响应能力。本文将深入解析并行开发模型,涵盖其类型、步骤及如何通过辅助工具优化团队协作和管理工作流。
61 3
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
112 3
|
26天前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
58 1
|
1月前
|
机器学习/深度学习 安全 搜索推荐
中国CRM市场深度解析:本土化定制开发的领军厂商与未来趋势
国内CRM软件企业正面临日益增长的本土定制需求,这不仅考验服务商的综合水平,也推动了市场的快速发展。本文将深入解析中国CRM市场的现状,探讨领军厂商的优势,并预测未来趋势,包括智能化、集成化、本土化与国际化并行及云服务模式的普及。
|
16天前
|
开发工具 Android开发 数据安全/隐私保护
探索移动应用的世界:从开发到操作系统的全面解析
【10月更文挑战第33天】在数字化时代,移动应用已成为我们日常生活中不可或缺的一部分。本文将深入探讨移动应用的开发过程,包括编程语言、开发工具和框架的选择,以及如何构建用户友好的界面。同时,我们还将分析移动操作系统的核心功能和安全性,以帮助读者更好地理解这些应用程序是如何在各种设备上运行的。无论你是开发者还是普通用户,这篇文章都将为你揭示移动应用背后的奥秘。
|
23天前
|
机器学习/深度学习 Android开发 UED
移动应用与系统:从开发到优化的全面解析
【10月更文挑战第25天】 在数字化时代,移动应用已成为我们生活的重要组成部分。本文将深入探讨移动应用的开发过程、移动操作系统的角色,以及如何对移动应用进行优化以提高用户体验和性能。我们将通过分析具体案例,揭示移动应用成功的关键因素,并提供实用的开发和优化策略。
|
24天前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
40 0
|
iOS开发
iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
<ol start="1" class="dp-objc" style="padding:0px; border:none; list-style-position:initial; color:rgb(92,92,92); font-family:Consolas,'Courier New',Courier,mono,serif; line-height:26px; margin:0px
2353 0
|
5天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
13天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
34 9

推荐镜像

更多
下一篇
无影云桌面