ViewDay07

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(01);

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 推力

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值