1. Core Animation
1.1 是什么
是一个图形渲染和动画的底层框架,用于IOS和MACOS的开发
1.2 能干什么
提供更多更强大的图形渲染(显示)效果,提供专业级的动画效果,是高层图形技术的技术,有更强大的API.
1.3 如何使用
经常获取一个.layer属性(类型是CALayer),对此属性进行相关的草错,来达到需要的效果。(动画、渲染)
在IOS中,基本上能看得见、摸的着的基本上都是UIView。
其实UIView之所以能显示屏幕完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(CALayer),通过UIView的属性访问它的。
当UIViewo需要显示到屏幕上时,会调用drawRect:方法进行绘制,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。
UIView本身不具备显示的能力,拥有显示功能,是它内部的图层。(CALayer)
1.4 如何获得CALayer层
任何UIView及子类对象都有一个属性叫.layer,此属性就是UIView的CoreAnimation层,类型是CALayer。
1.5 UIView类和CALayer
UIVI视图 CALayer层
.layer ——————> self.layer
.frame——————> .frame
(3*3) ——————> (4*4)
.transform ————> .transform:CATransform3D
.center ————> .postion
.autoresizing ——> .autoresizing
+addSubViews ——> .addSubLayer
UIKit ——————> CoreAnimation
1.6 CoreAnimation 动画是什么
是什么?是非常强大的动画处理的API,使用它能做出非常绚丽的效果,而且往往能事半功倍,也就是说使用少量的代码就可以实现非常强大的功能。
CoreAnimation是跨平台的,MACOS和IOS平台。
CoreAnimation是动画执行过程是在后台操作的,不会阻塞主线程。可以理解为在执行动画的时候,还能点击按钮。
要注意,CoreAnimation动画,是直接操作UILayer的,而非UIView。
框架(framework):类的集合。
Foundation框架:NSObject、NSValue…
UIKit框架:UIButton、UILabel…
API:(Application program interface):类中有哪些内容可以用。包括属性和方法。
UIButton类:属性(backgroundColor…)设置背景属性 方法(addTarget…)设置事件方法
1.7 使用步骤
CoreAnimation
CAPropertyAnimation
*CAKeyframeAnimation
*CABasicAnimation
(1)关键帧动画(CAKeyframeAnimation)
<1>创建动画对象
参数一:创建的是关键帧动画 position位置 transform变形 opacity透明度
参数二:指定key,用来区分不同的动画对象CocoaLigature1
animationWithKeyPath…
<2>设置重要属性
.path 动画路径 可以指定运动的路径
.duration 动画时长 可以指定动画的时长
.removeOnCompletion = YES 动画执行后自动删除
<3>将动画加入到需要执行的层上
[self.myImageView.layer addAnimation:…]
(2)基础动画(CABasicAnimation)
与keyFrameAnimation不同的时,基础动画没有路径属性(.path),根据数值来做动画效果。经常用来做旋转、缩放、透明度动画。
<1>创建动画对象
animation…类方法
<2>重要属性
fromValue 动画前的属性值
toValue 动画后的属性值
.duration 动画的时长
.removeOnCompletion = YES 动画后删除动画对象
<3>将动画加入到需要执行的图层上
CATransform3D
<1>是什么
是一个结构体,是一个4*4的矩阵,描述一个3D图形的变形(旋转、缩放、位移)。
这个变形会有3D效果,包括x,y,z三个轴的变形。
<2>如何使用
CATransform3D
用以前的变形结果创建现在的变形(第一次)
MakeAffineTransform
…旋转
MakeRotation
…缩放
MakeScale
…位移
MakeTranslation
CATransform3D…
在现在的基础上创建变形(多次,叠加)
Rotation,Scale,Translation
CATransform3DIdentity 任何一个layer对象的初始值
练习:渐显效果
NSTimer 手动实现动画 灵活度比较高的时候
UIImage UIView 动画样式简单,操作方便。
CoreAnimation 灵活度比较高,操作方便。(缺陷:API(属性或方法)的名称有点长)。
CAKeyframe…关于图形的移动更加灵活。
CABasic…基本的动画处理,更加多样。
2.动力 UIKit Dynamic
2.1 是什么(物理学特性)
中文翻译:动力、动力模型、动态。
IOS7开始技术,提供一个模拟真实世界中力学相关的动画和交互系统,比如重力、碰撞(弹力)、吸附...等。
Dynamic 设计非常灵活,可组合、可重用。
2.2 UIKit Dynamic 架构
UIDynamicAnimator(核心类)->Reference View
UIDynamicBehavior(具体动力)->View 行为(重力、碰撞、吸附等)
(1)UIDynamicAnimator(核心类)总管
首先需要一个Reference View(引用视图)作为坐标系的参考,控件动画引擎,维护动力行为的状态。
(2)UIDynamicBehavior(行为类)
对象动力和一个视图绑定在一起,让此视图具有某种行为。例如:重力行为对象绑定给一个视图对象后,视图就具备重力的行为特性。
UIGravityBehavior 重力
创建两个动力对象
a.总管、重力
b.总管管理相应的重力对象及可
UICollisionBehavior 碰撞
a.总管、重力、碰撞
重力:
重力的方法:x正向左 x负向右 y正向下 y负向上
CocoaLigature0 gravityBehavior.gravityDirection = CGVectorMake(0, 1);
b.碰撞:
将引用视图的四周翻译成可碰撞的四个边
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
设置被委托对象 处理碰撞后的事件遵守协议 实现协议中的方法
collisionBehavior.collisionDelegate = self;
碰撞后触发的事件方法
- (void)collisionBehavior:(UICollisionBehavior*)behavior endedContactForItem:(id <UIDynamicItem>)item withBoundaryIdentifier:(id <NSCopying>)identifier
碰撞后相应的信息处理
-(void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p
UISnapBehavior 闪 -> 瞬移
得到一个移动的距离坐标
CGPoint point = [sender locationInView:self.view];CocoaLigature1
添加新的动力(瞬移、闪)
self.snapBehavior = [[UISnapBehavior alloc]initWithItem:self.myImageView snapToPoint:point];CocoaLigature1
UIAttachmentBehavior 吸附
a.创建动力对象 总管、重力、吸附
b.与手势配合使用
根据手势的不同状态,添加或删除相应的动力。
UIPushBehavior 推力