iOS:CALayer核心动画层

CALayer:核心动画层

简介:

Core Animation 是跨平台的,支持iOS环境和Mac OS X环境

学习核心动画之前,需要先理解CALayer,因为核心动画操作的对象不是UIView,而是CALayer

CALayer是核心动画的基础,可以做圆角、阴影、边框等效果

每个UIView内部都有一个Layer的属性

在实现核心动画时,本质上是将CALayer中的内容转换成位图,从而便于图形硬件的操纵

UIView的CALayer基本演练:

演练设置UIView中的CALayer属性

–圆角、边框、阴影及3D形变属性

注意:

1.在UIView中CALayer只是一个类声明,因此需要添加QuartzCore框架

2.UIKit框架只能应用在iOS而不能用于Mac,但是Quartz 2D是可以跨平台的,因此在使用颜色时,不能直接使用UIColor而需要将颜色转成CGColor

3.修改图层相当于修改UIView属性,即修改了界面属性

4.形变属性既可以用形变函数指定,也可以用keyPath指定

UIImageView的CALayer基本演练 :

演练1.设置UIImageView中的CALayer属性

–圆角、边框、阴影

–注意:

UIImageView中不仅一个子图层,因此设置圆角时需要使用setMasksToBounds:YES,让所有子图层跟随边框,不过设置该属性后,无法使用阴影效果

•解决办法:可以在底层附加一个UIView实现阴影效果

•演练2.设置UIImageView中的CALayer属性

–transform

–说明:transform属性可以调整CALayer的形变,其中包括:旋转、缩放、平移

–transform属性的参数查询:CATransform

图层和视图之间的关系:

•创建视图对象时,视图会自己创建一个层,视图在绘图(如drawRect:)时,会将内容画在自己的层上。当视图在层上完成绘图后,系统会将图层拷贝至屏幕。每个视图都有一个层,而每个图层又可以有多个子层

•提示:

1.Layer的设计目的不是为了取代视图,因此不能基于CALayer创建一个独立的可视化组件

2.Layer的设计目的是提供视图的基本可视内容,从而提高动画的执行效率

3.除提供可视内容外,Layer不负责视图的事件响应、内容绘制等工作,同时Layer不能参与到响应者链条中

CALayer层次结构图:

CALayer的使用说明:

•通过UIView的layer属性可以拿到对应的根层,这个层不允许重新创建,但可以往层里面添加子层(调用CALayer的addSublayer)

•要具体使用CALayer,需要引入<QuartzCore/QuartzCore.h>

•获取当前图层或使用静态方法layer初始化CALayer后,可以设置以下属性:

1.bounds:宽度和高度

2.position:位置(默认指中心点,具体由anchorPoint决定)

3.anchorPoint:锚点(x,y的范围都是0-1),决定了position的含义

4.backgroundColor: 背景颜色(CGColorRef类型)

5.borderColor:边框颜色(CGColorRef类型)

6.borderWidth:边框宽度

7.cornerRadius:圆角半径

8.contents: 内容(比如设置为图片CGImageRef)

9•transform:旋转、缩放、平移

•注意:

1.虽然CALayer可以使用frame,但最好还是使用bounds和position。为层设置动画时,用bounds和position会方便一点

2.注意锚点和位置的关系,以及在旋转转换时对图层的影响

3.UIView有一个addSubview方法,而layer有一个addSubLayer方法

CALayer中图像及颜色的注意事项:

•注意:

–CALayer中使用CGColorRef和CGImageRef的数据类型,而不用UIColor和UIImage

•原因:

–QuartzCore(包含CALayer类)和Core Graphics(包含CGImageRef、CGColorRef)框架都能在iOS和Mac OS X上使用,但是UIKit(包含UIImage和其他UI开头的类)只能在iOS中使用

–为了保证可移植性,QuartzCore不能使用UIImage,只能使用CGImageRef

–不过很多情况下,可以通过UIKit对象的特定方法,可以得到Core Graphics对象,如UIImage的CGImage方法和UIColor的CGColor方法

CALayer的隐式动画属性:

•每一个UIView内部都默认关联着一个CALayer,称这个Layer为Root Layer。所有的非Root Layer都存在着隐式动画,隐式动画的默认时长为1/4秒。

•当修改非Root Layer的部分属性时,相应的修改会自动产生动画效果,能执行隐式动画的属性被称为“可动画属性”,诸如:

1.bounds: 缩放动画

2.position: 平移动画

3.opacity: 淡入淡出动画(改变透明度)

•在文档中搜素animatable可以找到所有可动画属性

•如果要关闭默认的动画效果,可以通过动画事务方法实现:

[CATransaction begin];

[CATransaction setDisableActions:YES];

// ...

[CATransaction commit];

在CALayer上绘图:

•要在CALayer上绘图,有两种方法:

1.创建一个CALayer的子类,然后覆盖drawInContext:方法,可以使用Quartz2D API在其中进行绘图

2.设置CALayer的delegate,然后让delegate实现drawLayer:inContext:方法进行绘图

•注意:

–不能再将UIView设置为这个CALayer的delegate,因为UIView对象已经是内部层的delegate,再次设置会出问题

–无论使用哪种方法,都必须向层发送setNeedsDisplay消息,以触发相应绘图方法的调用

CALayer、UIView以及上下文之间的关系 :

•当UIView收到setNeedsDisplay消息时,CALayer会准备好一个CGContextRef,然后向它的delegate即UIView,发送消息,并且传入已经准备好的CGContextRef对象。UIView在drawLayer:inContext:方法中会调用自己的drawRect:方法

•平时在drawRect:中通过UIGraphicsGetCurrentContext()获取的就是由CALayer传入的CGContextRef对象,在drawRect:中完成的所有绘图都会填入CALayer的CGContextRef中,然后被拷贝至屏幕

•CALayer的CGContextRef用的是位图上下文(Bitmap Graphics Context)

本节知识点回顾:

•每个UIView内部都有一个Layer的属性

•要具体使用CALayer,需要引入<QuartzCore/QuartzCore.h>

•CALayer中使用CGColorRef和CGImageRef的数据类型,而不用UIColor和UIImage

•所有的非Root Layer都存在着隐式动画

•创建一个CALayer的子类,然后覆盖drawInContext:方法,可以使用Quartz2D API在其中进行绘图

•在实现核心动画时,本质上是将CALayer中的内容转换成位图,从而便于图形硬件的操纵

时间: 10-13

iOS:CALayer核心动画层的相关文章

iOS:CALayer核心动画层上绘图

在CALayer上绘图: •要在CALayer上绘图,有两种方法: 1.创建一个CALayer的子类,然后覆盖drawInContext:方法,可以使用Quartz2D API在其中进行绘图 2.设置CALayer的delegate,然后让delegate实现drawLayer:inContext:方法进行绘图 •注意: –不能再将UIView设置为这个CALayer的delegate,因为UIView对象已经是内部层的delegate,再次设置会出问题 –无论使用哪种方法,都必须向层发送set

iOS:核心动画之基本动画CABasicAnimation

基本动画,是CAPropertyAnimation的子类 属性说明: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 动画过程说明: 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue keyPath内容是CALayer的可动画Animatable属性 如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执

ios开发核心动画七:核心动画与UIView动画的区别

/** UIView与核心动画区别?(掌握) 1.核心动画只作用在layer. 2.核心动画看到的都是假像,它并没有去修改UIView的真实位置. 什么时候使用核心动画? 1.当不需要与用户进行交互,使用核心动画 2.当要根据路径做动画时,使用核心动画:CABasicAnimation,CAKeyFrameAnimation,两个都可以根据绘制的路径UIBizerPath来绘制路径来执行动画 3.当做转场动画时, 使用核心动画 (核心动画转场类型比较多)CATrasition或是UIView的核

iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

核心动画的详解介绍:CAAnimation(抽象类) 1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h> ,在iOS7中不需要 2.动画分类 基本动画    CABasicAnimation 关键帧动画  CAKeyframeAnimation 动画组     CAAnimationGro

ios之核心动画(Core Animation)

Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView. CALayer与UIView的关系 在iOS中,你能看得见摸得着的东西基本

IOS开发核心动画篇---核心动画简介

iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation是跨平台的,可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.不阻塞主线程,可以理解为在执行动画的时候还能点击(按钮). 要注意的是,Core Animation是直接作用

IOS开发核心动画篇—转场动画和组动画

iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果 属性解析: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(在整体动画的百分比)

iOS开发-核心动画高级编程Core Animation系列(转)

iOS-Core-Animation-Advanced-Techniques 转 GitHub译文 iOS核心动画高级编程全集 iOS-核心动画高级编程/1-图层树 iOS-核心动画高级编程/2-寄宿图 iOS-核心动画高级编程/3-图层几何学 iOS-核心动画高级编程/4-视觉效果 iOS-核心动画高级编程/5-变换 iOS-核心动画高级编程/6-专有图层 iOS-核心动画高级编程/7-隐式动画 iOS-核心动画高级编程/8-显示动画 iOS-核心动画高级编程/9-图层时间 iOS-核心动画高

IOS学习--核心动画

1.CoreAnimation的介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程. 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView 详细地址:http://www.cnb