iOS的动画实现有3重方式:
1.UIView 动画,这是最基本最常用的动画方式,主要改变UIView的属性来达到动画的效果(渐隐/渐现).
//
开始动画
[UIView beginAnimations:@"animataion1" context:nil];
// 设置动画时间
[UIView setAnimationDuration:2];
// 延迟时间
[UIView setAnimationDelay:1];
// 重复次数
[UIView setAnimationRepeatCount:MAXFLOAT];
// 设置代理
[UIView setAnimationDelegate:self];
// 设置动画结束后执行的代理方法
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// 修改动画的属性
view.alpha = 0.1;
// 提交动画
[UIView beginAnimations:@"animataion1" context:nil];
// 设置动画时间
[UIView setAnimationDuration:2];
// 延迟时间
[UIView setAnimationDelay:1];
// 重复次数
[UIView setAnimationRepeatCount:MAXFLOAT];
// 设置代理
[UIView setAnimationDelegate:self];
// 设置动画结束后执行的代理方法
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// 修改动画的属性
view.alpha = 0.1;
// 提交动画
[UIView commitAnimations];
后来学习了block语法动画,上面这个由于不方便就不常用了;
(1)淡入淡出动画
[
UIView
animateWithDuration
:
2
animations
:^{
view. frame = CGRectMake ( 90 , 400 , 100 , 100 );
}];
view. frame = CGRectMake ( 90 , 400 , 100 , 100 );
}];
[ UIView animateWithDuration : 2 animations :^{
view. frame = CGRectMake ( 90 , 400 , 200 , 200 );
} completion :^( BOOL finished) {
if (finished) {
view. frame = CGRectMake ( 90 , 90 , 100 , 100 );
}
}];
(2)视图切换动画(省略)
2.CATransition动画,主要用于两个视图切换过度的动画效果,系统内置了几种效果,可以直接使用.
通过改变视图的transform属性,可以实现动画
3.CAAnimation动画,这是iOS的核心动画,结合绘图(layer图层)可以实现灵活多变的动画效果.
CAAnimation是所有动画对象的父类,负责控制动画持续的时间和速度,是个抽象类,不能直接使用,需要使用他的具体的子类
(1)使用Core Animation往往事半功倍,需要先添加QuartzCore.framework和引入对应的框架<
QuartzCore/
QuartzCore.h
>,
(2)开发步骤:
1>> 初始化一个动画对象(CAAnimation)并设置相关动画属性:opacity,position,transform,bounds,contents等,具体可以在API文档中搜索:CALayer Animatable Properties;
2>> 添加动画对象到层(CALayer)中,开始执行动画:
通过调用CALayer的addAnimation:forKey增加动画到层(
CALayer
)中,这样就触发动画了.
调用removeAnimationForKey可以停止动画.
CAAnimation动画的执行过程都是在后台操作的,不会阻塞主线程.
常用属性:
duration:动画持续时间
repeatCount:重复次数,如果想要无限循环可以设置HUGE_VALF或者MAXFLOAT
repeatD
uration:重复时间
removedOnCompletion:默认YES,如果想要动画结束后人保持在动画执行后的状态,就设置为NO;不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为,比如动画结束之前或者结束之后(如果想要
fillMode有效,最好设置
removedOnCompletion = NO
).
beginTime:用来设置动画延迟执行时间,如果想延迟2s,则设为CACurrentMediaTime()+2;
CACurrentMediaTime:是图层的当前时间
CAAnimation的代理方法:
//动画
开始
- (
void
)animationDidStart:(
CAAnimation
*)anim ;
//动画
结束
- (
void
)animationDidStop:(
CAAnimation
*)anim finished:(
BOOL
)flag
如上图显示的,
CAAnimation下有四种子动画,CABasicAnimation是基础动画,可以缩放,旋转,快速旋转并设置好角度会造成抖动的效果.
CAKeyFrameAnimation是关键帧动画,可以使视图绕着贝塞尔曲线或者做圆周运动.
CAAnimationGroup是组动画,可以将两个动画放到一个组里面,实现动画的叠加.
CATransition是转场动画,可以实现两个视图之间的动画转换,也可以用来修改导航控制器的动画效果.
UIView也可以用下面两个方法实现两个视图的翻转效果:
[
UIView
transitionFromView
:
_view1
toView
:
_view2
duration
:
1
options
:
UIViewAnimationOptionTransitionFlipFromLeft
completion
:^(
BOOL
finished) {
NSLog ( @"finished" );
NSLog ( @"finished" );
}];
单视图翻转:
[
UIView
setAnimationTransition
:
UIViewAnimationTransitionFlipFromLeft
forView
:
_view1
cache
:
YES
];
[UIView commitAnimations];