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
repeatDuration:重复时间
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];