CALayer(持续更新)

简介:

CALayer

The CALayer class manages image-based content and allows you to perform animations on that content. Layers are often used to provide the backing store for views but can also be used without a view to display content. A layer’s main job is to manage the visual content that you provide but the layer itself has visual attributes that can be set, such as a background color, border, and shadow. In addition to managing visual content, the layer also maintains information about the geometry of its content (such as its position, size, and transform) that is used to present that content onscreen. Modifying the properties of the layer is how you initiate animations on the layer’s content or geometry. A layer object encapsulates the duration and pacing of a layer and its animations by adopting the CAMediaTiming protocol, which defines the layer’s timing information.

CALayer类能管理基于图片的内容,允许你在图片内容上执行动画.Layer经常被用来当做view存储容器,其也能够脱离view独立的显示内容.一个layer的主要工作就是管理你提供的可视化对象,但是layer它自身也有很多可见属性可以设置,诸如背景色,边框以及阴影.它还额外的管理其他可视化的一些内容.layer还包括了相关坐标信息用来在屏幕上显示.修改layer的属性可以在屏幕上产生动画效果.一个layer对象将一个layer动画的时间以及步骤通过继承 CAMediaTimeing 协议封装起来,这个协议决定了 layer 的时间轴信息.

 

1. 测试UIImageView与CALayer之间的关系

以下为打印信息:

2014-04-18 10:21:28.406 StudyCoreAnimation[672:60b] <CGImage 0x16521520>
2014-04-18 10:21:28.409 StudyCoreAnimation[672:60b] {{100, 100}, {100, 100}}

很明显,layer的内容是图片,坐标系也是与View的一致.

 

延时两秒后改变一些值,并重新检测layer值的变化.

2014-04-18 10:27:40.292 StudyCoreAnimation[685:60b] <CGImage 0x17656050>
2014-04-18 10:27:40.295 StudyCoreAnimation[685:60b] {{100, 100}, {100, 100}}
2014-04-18 10:27:40.297 StudyCoreAnimation[685:60b] 0.500000
2014-04-18 10:27:42.489 StudyCoreAnimation[685:60b] {{100, 100}, {200, 200}}
2014-04-18 10:27:42.491 StudyCoreAnimation[685:60b] 0.900000

 

你会发现,layer的值与View中设置的值是一致变化的.是否我们可以理解成layer是View的容器,View中设置的值直接影响layer的行为.那如果我们直接改变layer的值会影响View的相关属性么?

2014-04-18 10:32:28.157 StudyCoreAnimation[699:60b] <CGImage 0x16536770>
2014-04-18 10:32:28.161 StudyCoreAnimation[699:60b] {{100, 100}, {100, 100}}
2014-04-18 10:32:28.164 StudyCoreAnimation[699:60b] 0.500000
2014-04-18 10:32:30.364 StudyCoreAnimation[699:60b] {{100, 100}, {200, 200}}
2014-04-18 10:32:30.366 StudyCoreAnimation[699:60b] 0.900000

 

目前可以看出,设置View上的相关属性实际上是在直接设置layer的属性.一个View与一个layer一一绑定,我们来试试添加一个新的layer到View中看看效果.

2014-04-18 10:41:25.063 StudyCoreAnimation[33874:60b] {{0, 0}, {50, 50}}

至少从打印信息可以看出,新添加的layer设置的frame值是以这个View的bound值为基准的,我们再来看看设置这个View自己的layer时是否会影响新添加的layer.

2014-04-18 10:47:04.927 StudyCoreAnimation[34006:60b] {{0, 0}, {50, 50}}

你会发现,绑定的layer的透明度以及坐标更改了,它影响到了新添加的layer,但是,它自己size的改变却没有影响到新添加的layer的size的改变.

新layer的size并没有随着绑定layer的值的改变而按比例改变.

想按照等比例缩放,需要自己设置等比例的值来缩放.

而且,执行看变化的时候还有动画改变的效果,如果你要关闭动画效果,用下面的方式就行了:

还可以进行layer动画速度的设置:

 

设置mask

这是用来遮罩的图片mask

显示的实际效果:

 

小结:

1. 被View绑定的layer,其参数的改变,如果涉及到size的修改并不会影响新添加layer的size.

2. 绑定的layer参数改变的时候,是没有动画效果的.

3. 新添加进来的layer在修改值时有动画效果,我们可以关闭动画也可以开启动画,并设置动画的速度.

4. 初始化新layer时要记得设置初始frame.

 

 

2. UIView animateWithDuration与layer的关系

2014-04-18 12:56:44.395 StudyCoreAnimation[35617:1303] {{100, 100}, {200, 200}}
2014-04-18 12:56:44.397 StudyCoreAnimation[35617:1303] 0.100000

从打印结果可以看出,UIView中使用的animateWithDuration方法的动画改变了layer的值.

如果对layer进行动画,会有什么效果呢?

2014-04-18 13:06:22.012 StudyCoreAnimation[35799:60b] {{100, 100}, {100, 100}}
2014-04-18 13:06:22.015 StudyCoreAnimation[35799:60b] 1.000000

从打印结果可以看出,对View中layer执行动画后,它的值一直都没有改变.与UIView的动画有着本质的区别.

动画是2s,我在1s的时候打印了opacity的值

2014-04-18 13:10:52.116 StudyCoreAnimation[35847:60b] {{100, 100}, {100, 100}}
2014-04-18 13:10:52.117 StudyCoreAnimation[35847:60b] 0.100000

从结果可以看出,layer一开始的值就是被设置成了0.1,动画的途中其打印值还是为0.1,从这里大概可以了解CABasicAnimation的原理了.它一次只能设定一个值,当给layer提交动画时,我猜测发生了如下现象:

1. 完整的拷贝了被绑定的layer

2. 隐藏被绑定的layer

3. 动画结束时移除拷贝的layer并显示出被绑定的layer

我来验证我的看法,如下图所示,我把View动画设置成3s,然后,在1s的时候打印出该View的layer的值,发现早就已经设置成最终结果了.

再来看看removedOnCompletion参数

从以上可以看出,动画结束了效果没有被移除,效果还在,但是alpha的值还是为1,执行了removeAllAnimations时才还原.

 

小结:

1. View的动画实际上是对layer动画的封装,并在动画刚开始的时候就已经把layer相关值设定好了,动画只是一个过程

2. CABasicAnimation动画结束后是需要设定一个layer相关改变的值的,否则会还原

3. 另外一种解释现象的方法是:动画并没有实时改变layer的值,动画只是一种提交给系统用来在layer上进行绘制的一个渲染过程,并不是实时的改变layer的值,动画效果只关注你提供layer的初始值,layer的结束值,然后渲染出效果,并不关心动画结束后,layer的参数变化,他是脱离于layer的.

目录
相关文章
|
6天前
|
人工智能 安全 API
CoPaw:5分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
8天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
9838 78
|
6天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
5340 14
|
7天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
5356 12
|
9天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
5639 14
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
4天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
2831 6
|
2天前
|
人工智能 JavaScript 测试技术
保姆级教程:OpenClaw阿里云及本地部署+Claude Code集成,打造全能 AI 编程助手
在AI编程工具百花齐放的2026年,Anthropic推出的Claude Code凭借72.5%的SWE-bench测试高分、25倍于GitHub Copilot的上下文窗口,成为开发者追捧的智能编程助手。但单一工具仍有局限——Claude Code擅长代码生成与审查,却缺乏灵活的部署与自动化执行能力;而OpenClaw(前身为Clawdbot)作为开源AI代理框架,能完美弥补这一短板,通过云端与本地双部署,实现“代码开发-测试-部署”全流程自动化。
1469 13
|
4天前
|
人工智能 JavaScript API
阿里云及本地 Windows 部署(OpenClaw+Ollama)保姆级教程及技能扩展与问题排查
OpenClaw(原Clawdbot)作为2026年主流的开源AI智能体工具,具备系统级操作权限,能将自然语言指令转化为文件操作、程序控制等实际行为。搭配轻量级本地大模型管理工具Ollama,可实现本地推理、数据私有化存储的全闭环;而阿里云提供的云端部署方案,则能满足7×24小时稳定运行需求。本文将详细拆解2026年阿里云与本地(Windows 11系统)部署OpenClaw的完整流程,包含Ollama模型定制、技能扩展及常见问题排查,所有代码命令可直接复制执行,零基础用户也能快速上手。
1820 3

热门文章

最新文章