CoreAnimation 开篇
CoreAnimation 开篇
CoreAnimation系列博客是我对学习CoreAnimation的知识整理,博客排列顺序以及知识讲解存在欠缺望见谅.
博客的编写是在工作之余,尽量保证CoreAnimation系列博客在6月初全部编写完成,感兴趣的同学可以关注一下.
为了保证学习CoreAnimation的质量我会在每个篇幅结束后附上GitHub地址以供查看源码.
CoreAnimation简介
CoreAnimation将其翻译为中文则是"核心动画"(Core:核心,Animation:动画).然而如果单纯的只是介绍动画我想我不会用大规模的篇幅去梳理其概念,api,以及代码实现.
CoreAnimation中的动画只是其一小部分, CoreAnimation实际上是一个复合引擎,它的功能是以其最快的速度组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中.这个树便是我们在iOS程序上所能看到视图的基础.
图层树
视图与图层
所谓的视图就是我们错看到的内容,它能够拦截类似于鼠标点击或者触摸手势等操作,视图在层级关系中可以互相嵌套,一个视图可以管理它的所有子视图的位置.图层则是视图之间的层级关系,下面两张图就分别是视图与图层.

所在iOS当中,所有的视图都从一个叫做UIVIew的基类派生而来,UIView可以处理触摸事件,可以支持基于Core Graphics绘图,可以做仿射变换(例如旋转或者缩放),或者简单的类似于滑动或者渐变的动画.
CALayer
CALayer与UIView的区别和联系我写过一篇博客.
CALayer与UIView的区别和联系
平行的层级关系
每个UIView上都会存在一个CALayer,而实质行UIView的职责也就是控制和管理图层(CALayer),并且响应事件.真正的图形展示以及动画处理都是CALayer去做的.因此UIView是在CALayer上的封装以及添加了响应事件的功能.
图层的能力
在某种意义上说UIView既然是对CALayer的封装,那么我们使用UIView就好了,而且对于一些简单的需求来说,我们确实没必要处理CALayer,因为苹果已经通过UIView的高级API间接地使得动画和视图的展现变得很简单.
但是这种简单会不可避免地带来一些灵活上的缺陷.如果你略微想在底层做一些改变,或者使用一些苹果没有在UIView上实现的接口功能,这时除了介入CoreAnimation底层之外别无选择.
例如下面的功能,我们只能选择CALayer去实现.
- 阴影,圆角,带颜色的边框
- 3D变换
- 非矩形范围
- 透明遮罩
- 多级非线性动画
- 等等
使用图层
下面让我们真正的去使用图层.
- 圆角,带颜色的边框

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *centerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.centerView.layer.cornerRadius = 10;// 设置图层的圆角半径
self.centerView.layer.borderWidth = 2;// 设置图层的边框宽度
self.centerView.layer.borderColor = [UIColor greenColor].CGColor;// 设置图层的边框颜色
self.centerView.layer.masksToBounds = YES;//暂不理会
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
CoreAnimation 开篇的更多相关文章
- CoreAnimation 目录
CoreAnimation 目录 CoreAnimation 开篇 CoreAnimation 寄宿图 CoreAnimation 图层几何学 CoreAnimation 视觉效果
- 16 (OC)* UIAnimation和CoreAnimation
目录 一 Core Animation 二 核心动画 2.1 基础动画 2.2 关键帧动画 2.3 动画组 2.4 转场动画 2.5 逐帧动画 三 UIView动画封装 3.1 基础动画 3.2 弹簧 ...
- 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源
前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
- Entity Framework入门系列(1)-扯淡开篇
这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...
- iOS CoreAnimation详解(一) 有关Layer的动画
以前由于项目需要 也写了一些动画 ,但是知识不系统,很散.这段时间趁着项目完成的空袭,来跟着大神的脚步系统的总结一下iOS中Core Animation的知识点. 原博客地址:http://blog. ...
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...
- web自动化工具-开篇
web自动化工具-开篇 最近几年,前端技术风一样的速度迭代更新,各种框架工具雨后春笋般涌现,作为一个平凡的开发者,也只能在洪流中沉沉浮浮,微不足道,以前前端叫做切图仔.美工,如今改了称号叫前端工程师, ...
- [翻译svg教程]svg学习系列 开篇
目录 [翻译svg教程]svg学习系列 开篇 [翻译svg教程 ]svg 的坐标系统 [翻译svg教程]svg 中的g元素 [翻译svg教程]svg中矩形元素 rect [翻译svg教程]svg中的c ...
随机推荐
- js控制href内容的连接内容的变化
html: <a data-toggle="modal" href="#myModal_devices" id="check_devices&q ...
- js验证IP及子网掩码的合法性
function checkIP(ip) { obj=ip; var exp=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0 ...
- 单选按钮(RadioButton)与复选框(CheckBox)的功能与用法
单选按钮(RadioButton)和复选框(CheckBox).状态开关按钮(ToggleButton)与开关(Switch)是用户界面中最普通的UI组件,他们都继承了Button类,因此都可直接使用 ...
- linux下安装TensorFlow(centos)
一.python安装 centos自带python2.7.5,这一步可以省略掉. 二.python-pip pip--python index package,累世linux的yum,安装管理pyth ...
- PowerDesigner如何把建好的表导入到数据库中,并且把注释也导入进去
第一次接触这个软件,经过自己的捣鼓和百度,终于可以顺利的导入数据库中了,好开森,希望可以帮助到更多人. 数据库(mysql)其实和sqlserver差不多,以16.5版本为例 1.选中一个PDM项目, ...
- python实现二分查找与冒泡排序
二分查找,代码如下: def binarySearch(l, t): low, high = 0, len(l) - 1 while low < high: 'print low, high' ...
- [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- C语言高效位操作
思考: 1. 如何将一个数据中的多个不连续位清位? 1. 如何将一个数据中的多个不连续位置位? 1. 如何反转一个数据中的多个不连续位(1->0, 0->1)? 基础知识:C 语言位操作 ...
- 智能指针shared_ptr
// 智能指针会自动释放所指向的对象. // shared_ptr的应用场景是:程序需要在多个对象间共享数据 /* 先从应用场景入手吧,说矿工A发现了一个金矿. * 然后矿工A喊来了矿工B,一起开采, ...
- Android Studio 错误集
错误列表与解决方案: 1.Android studio Gradle project sync failed Android studio 构建项目出错 Error:Unable to start t ...