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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 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;

目录
相关文章
|
26天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
1月前
|
人工智能 监控 数据可视化
提升开发效率:看板方法的全面解析
随着软件开发复杂度提升,并行开发模式下面临资源分配不均、信息传递延迟及缺乏全局视图等瓶颈问题。看板工具通过任务状态实时可视化、流量效率监控和任务依赖管理,帮助团队直观展示和解决这些瓶颈。未来,结合AI预测和自动化优化,看板工具将更高效地支持并行开发,成为驱动协作与创新的核心支柱。
|
1月前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
67 5
|
2月前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
2月前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
191 3
|
2月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
1月前
|
自然语言处理 数据处理 索引
mindspeed-llm源码解析(一)preprocess_data
mindspeed-llm是昇腾模型套件代码仓,原来叫"modelLink"。这篇文章带大家阅读一下数据处理脚本preprocess_data.py(基于1.0.0分支),数据处理是模型训练的第一步,经常会用到。
53 0
|
2月前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    DeepSeek技术报告解析:为什么DeepSeek-R1 可以用低成本训练出高效的模型
  • 4
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 5
    DeepSeek模型的突破:性能超越R1满血版的关键技术解析
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 7
    深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
  • 8
    阿里云服务器经济型e实例解析:性能、稳定性与兼顾成本
  • 9
    小红书笔记详情 API 接口:获取、应用与收益全解析
  • 10
    阿里云CDN怎么收费?看这一篇就够了,CDN不同计费模式收费价格全解析
  • 推荐镜像

    更多