iOS动画

来源:互联网 发布:java 简单代码实例 编辑:程序博客网 时间:2024/04/28 15:16

动画 

iOS动画实现技术主要是:Core Animation 

Core Animation负责所有的滚动、旋转、缩小和放大以及所有的iOS动画效果。其中UIKit类通常都有animated:参数部分,它可以允许是否使用动画。 

Core Animation还与Quartz紧密结合在一起,每个UIView都关联到一个CALayer对象,CALayerCore Animation中的图层。图层,图层是动画发生的地方,CALayer总是与UIView联,通过layer属性访问。


动画有三种形式

1 隐式动画,这是一种最简单的动画,不用设置定时器,不用考虑线程或者重画。 

2 显式动画,是一种使用CABasicAnimation创建的动画,通过CABasicAnimation,可以更明确地定义属性如何改变动画。

 显式动画时候,不必定义CALayer变化,也不必执行它们,而是通过CABasicAnimation逐个定义动画。其中每个动画都含有各自的durationrepeatCount等属性。然后,使用addAnimation:forKey:方法分别将每个动画应用到层中。 

CATransform3DMakeAffineTransform函数是将仿射变换矩阵变成Core Animation使用的Transform3D类型的矩阵。

3 关键帧动画,这是一种更复杂的显式动画类型,这里可以定义动画的起点和终点,还可以定义某些帧之间的动画。

键帧动画中可以定义路径,把这些路径放入到CGMutablePathRef中与CG中的很相似。


动画使用常用方法两种方法1  UIView,2 CATransition

1 UIView动画是应用在一个view上面的。

UIKit直接将动画集成到UIView类中,实现简单动画的创建过程。UIView类定义了几个内在支持动画的属性声明,当这些属性发生改变时,视图为其变化过程提供内建的动画支持。

执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码包装到一个代码块中。

UIView方式可能在低层也是使用CATransition进行了封装,它只能用于一些简单的、常用的效果展现。

//动画1 UIView

//1设置动画

//UIView开始动画,第一个参数是动画的标识,第二个参数附加的应用程序信息用来传递给动画代理消息

[UIViewbeginAnimations:nilcontext:nil];

[UIViewsetAnimationDuration:0.7];//动画持续时间

[UIViewsetAnimationDelegate:self];//设置动画的回调函数,设置后可以使用回调方法

//2设置动画曲线

[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];

//3设置动画效果

[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlDownforView:self.viewcache:YES];//5下翻

[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];//6上翻

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];//7

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];//8

//写相关代实现动

//UI象大小,位置,形状化;或当前视图控制器中视图的切;或不同视图控制器之前的切

//4提交动画

[UIViewcommitAnimations];


2 CATransition动画是应用在一个layer上面的。

CATransition较强大,一般可以使用CATransitionUIView动画

CATransition进行更低层次的控制。

使用

//动画2 CATransition

步骤1 导入framework(QuartzCore.frameworkCoreData.framework)导入方法(点侧栏工程文件名-置窗口-Build Phases-Link Binary With Libraries-点击“+”-查找对应的framkwork-点击“add”确定添加

步骤2 导文件://导入动画效果头文件

#import<QuartzCore/QuartzCore.h>

3设置动画

CATransition *animation = [CATransitionanimation];

animation.delegate =self;

animation.duration =1.3;

animation.timingFunction =UIViewAnimationCurveEaseInOut;

animation.fillMode=kCAFillModeForwards;

4动画过渡效果

animation.type = kCATransitionFade;//1淡化-交叉淡化过渡(不支持过渡方向)

animation.type = kCATransitionPush;//2-视图把旧视图推出去

animation.type = kCATransitionReveal;//3揭开-将旧视图移开,显示下面的新视图

animation.type = kCATransitionMoveIn;//4覆盖-视图移到旧视图上面

animation.type = @"cube";//9立方体-立方体翻滚效果

animation.type = @"suckEffect";//10吸收-缩效果,如一块布被抽走(不支持过渡方向)

animation.type = @"oglFlip";//11-上下左右翻转效果

animation.type =@"rippleEffect";//12-滴水效果(不支持过渡方向)

animation.type = @"pageCurl";//13-向上翻页效果

animation.type = @"pageUnCurl";//14反翻-向下翻页效果

animation.type = @"cameraIrisHollowOpen";//15镜头开-相机镜头打开效果(不支持过渡方向)

animation.type = @"cameraIrisHollowClose";//16镜头关-相机镜头关上效果(不支持过渡方向)

5动画方向

animation.subtype = kCATransitionFromLeft;//从左向右

animation.subtype = kCATransitionFromBottom;//从下向上

animation.subtype = kCATransitionFromRight;//从右向左

animation.subtype = kCATransitionFromTop;//从上向下

6提交动画

//要令一个转场生效,组要将动画添加到将要变为动画视图所附着的图层。例如在两个视图控制器之间进行转场,那就将动画添加到窗口的图层中:  

//[[self.view.superview layer]addAnimation:myTransition forKey:nil ];  

//如果是将控制器内的子视图转场到另一个子视图,就将动画加入到视图控制器的图层。还有一种选择,用视图控制器内部的视图作为替代,将你的子视图作为主视图的子图层:  

 //[ self.view.layer addAnimation:myTransition forKey:nil ];  

//如果你使用的是导航控制器,可以将动画加到导航控制器的视图图层中。  

//[ navigationController.view.layer addAnimation:myTransition forKey:nil  ];  

如:视图控制器切换

[self.view.superview.layeraddAnimation:animation forKey:@"animation"];

[selfpresentViewController:showView animated:YEScompletion:nil];