玩转iOS开发:1.《Core Animation》基础概念

本文介绍了CoreAnimation的基本概念,探讨了CALayer与UIView之间的关系,并讲解了CALayer的主要功能及使用场景。

文章分享至我的个人博客: https://cainluo.github.io/14770254062641.html


作者感言

最近作者一直有一些迷糊, 感觉在研究上有了一些迷糊, 不知道怎么往下研究了, 咨询了一下朋友和一些前辈, 决定先玩一玩Core Animation, 毕竟是iOS的核心层之一, 也是最吸引人的地方之一, 今天就让我们先来了解一下Core Animation的一些概念知识. 最后: 如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考你们的意见再进行修改, 联系我时, 请备注Core Animation如果觉得好的话, 希望大家也可以打赏一下~嘻嘻~祝大家学习愉快~谢谢~


简介

  • Core AnimationiOSOS X平台上负责图形渲染与动画的基础设施。
  • Core Animation可以动画视图和其他的可视元素。
  • Core Animation为你完成了实现动画所需的大部分绘帧工作。
  • 你只需在配置少量的动画参数(如开始点位置和结束点位置)就可启动Core Animation
  • Core Animation将大部分实际的绘图任务交给了图形硬件处理,图形硬件会加速图形渲染的速度。
  • 这种自动化的图形加速让动画具有更高的帧率且更加平滑,但这并不会增加CPU的负担而导致影响你应用的运行速度。

以上的文字都是从官方文档里直接拷贝的, 如果有啥问题, 直接去PK通用官方文档iOS官方文档~~


图层与视图结构

在我们日常开发iOS或者是Mac应用中, 我们都避免不了对UI的布局(不然要UI设计师干嘛), 那我们一般是怎么去看应用中的图层结构呢? 让我们直接来看一个Demo吧.

创建一个新的项目, 然后在项目当中随意添加一个或者多个UI控件.

运行了项目之后, 找到查看图层的按钮, 点击之后就会跳转到查看图层的界面.

再换个角度看看~~

iOS当中, 无论是神马UIButton,UIScrollView, 还是神马UITableView, 都是基于UIView基类派生而来的, 而UIView是可以处理Touch事件, 也支持Core Graphics的绘画, 也可以做仿射变换(也就是神马旋转, 缩放事件), 当然, 也可以做类似于滑动, 渐变等UIView基础动画.


CALayer

CALayer其实是和UIView的概念差不多, 也是同样被层级关系树所管理, 也一样有神马图片, 文本, 背景色等内容, 或者是管理一些子图层等等, 但CALayerUIView最大的区别是在于,CALayer并不能处理用户交互, 即使CALayer提供了一些方法来判断触点是否在图层的范围之内.


UIView和CALayer层级关系

用过UIView的朋友们其实都知道, 每一个UIView当中都有一个CALayer实例的图层属性, 也就是所谓backing layer.

UIView的职责是用来创建并管理这个图层, 以确保层级关系中添加或者被移除的时候, 所关联的Layer也会有同样的操作.

虽然UIView是作为一个管理者, 但实际上显示在屏幕上以及做动画效果的都是Layer,UIView仅仅只是对Layer的一个封装, 提供了一些而外的方法, 比如Touch的功能,Core Animation底层方法的高级API, 所以UIViewCALayer是处于一个平级的关系.


疑惑

说到这里, 就会有一个疑惑, 为什么苹果要把UIViewCALayer处于一个平级的关系呢?(或许有人会有这样子的疑问)

其实原因很简单, 是为了职责分离, 也算是模块化划分吧, 因为在Mac OS当中, 并没有UIView这个类, 所以并不能处理Touch事件, 但却有CALayer, 所以苹果为了能够让Mac OSiOS两个系统相互共享代码, 直接把CALayer给独立出来了~~


CALayer的能力

其实在系统库当中, 苹果已经通过UIView提供了许多高级的API, 间接的使得动画变得很简单.

但这样子就带来另外的一个问题, 就是灵活性的缺失, 打个比方, 如果你想在底层做一些额外的操作, 通过系统提供的API是没法实现的, 这个时候, 我们除了去学习和了解Core Animation之外, 再也没有其他途径了.

那么说到底,CALayer到底能用来做什么呢? 有好几个点, 比如:

  • 阴影, 圆角, 边框
  • 3D变换(比如拉伸, 放大, 缩小等)
  • 非矩形范围
  • 透明遮罩
  • 多级非线性动画

大致上就这一些, 后续我们会通过学习Core Animation, 会了解更多的Layer, 以及怎么利用Layer做出我们想做的效果.


使用CALayer

一般来讲, 在我们日常开发中, 都是面对视图开发, 但如果某些特殊的场景, 我们还是需要面向CALayer来进行开发的, 比如

  • 开发一个可同时在Mac OS和iOS两个平台上使用的应用
  • 使用多种的CALayer子类, 并且不想创建一个UIView去封装它们
  • 做一些对性能特别挑剔的工作(暂时我也没想到, 知道的朋友可以和我说说)

但总的来说, 直接面向视图开发, 要比面向CALayer开发的要简单.


总结一下

说了那么多东西, 其实重点就那么几个:

  • CALayer与UIView是平级关系
  • CALayer与UIView的相同点与区别
  • CALayer可跨平台使用
  • CALayer不能够响应事件
  • UIView是基于CALayer封装的一个类, 并提供Touch事件

工程地址

项目地址: https://github.com/CainRun/CoreAnimation


最后

码字很费脑, 看官赏点饭钱可好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值