华山论剑之iOS动画

你要搞清楚自己人生的剧本——不是你父母的续集,不是你子女的前传,更不是你朋友的外篇。 --栋哥


做了这么长时间的iOS的开发,越来越发现一个问题,那就是iOS的动画的问题,一个好的APP一定要有一个完美的UI界面和使人们舒服的动画效果,但是前几次我所负责的项目所做的动画效果并不能是我满意,因为APP中的controller的跳转还有一些效果都没有达到预期的效果程度,今天接着这篇文章,我就说一说关于动画的一些事情.

在iOS当中,很多的属性可是设置动画效果,比如backgroundColor,bounds,frames,今天就从三个方面来说一下这个动画 分别是UIView动画,CALayer动画,转场动画.
我们动画的效果把.


华山论剑之iOS动画_第1张图片
华山论剑之iOS动画_第2张图片
图画的旋转.
1.UIView动画

1.1动画代理方法效果的演示,

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//首尾式动画
  [UIView beginAnimations:nil context:nil];
 //执行动画 //设置动画执行时间
 [UIView setAnimationDuration:2.0]; //设置代理
  [UIView setAnimationDelegate:self];
//设置动画执行完毕调用的事件
 [UIView setAnimationDidStopSelector:@selector(didStopAnimation)];
self.customView.center=CGPointMake(200, 300);
 [UIView commitAnimations];
}

我们把动画效果放在一个button的事件当中,在上面的方法当中,我们需要把无们所需要做的动画效果放在beginAnimations和commitAnimations两个方法当中,比如设置动画的事件 ,设置动画的代理.

1.2动画的block块模式(包含转场动画)

+ (void)**transitionFromView:(UIView *)fromView  toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions*)options  completion:(void (^)(BOOL finished))completion

上面的方法是我们最常用的block动画方法,也是我们的转场动画,在这个方法当中 ,我们可以指定从哪一个页面跳转到那一个页面.还可以设置下面的一些属性.
duration:动画的持续时间
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block

2.CALayer动画

关于CALayer动画和UIView动画相似,但是也是有区别的
UIView封装的动画执行完毕之后不会反弹。即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 //1.创建核心动画
CABasicAnimation *anima=[CABasicAnimation animation];
//平移
 anima.keyPath=@"position";
 //设置执行的动画
 anima.toValue=[NSValue valueWithCGPoint:CGPointMake(200, 300)];
 //设置执行动画的时间
 anima.duration=2.0;
 //设置动画执行完毕之后不删除动画
 anima.removedOnCompletion=NO;
 //设置保存动画的最新状态
 anima.fillMode=kCAFillModeForwards;
 // anima.fillMode=kCAFillModeBackwards;
 //设置动画的代理
anima.delegate=self;
//2.添加核心动画
 [self.customView.layer addAnimation:anima forKey:nil];

CALayer动画代理方法如下

-(void)animationDidStart:(CAAnimation *)anim {
//打印动画块的位置
NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint(self.customView.center));
NSLog(@"动画开始执行前的位置:%@",NSStringFromCGPoint( self.customView.layer.position));
 }
 -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
//打印动画块的位置
NSLog(@"动画执行完毕后的位置:%@",NSStringFromCGPoint( self.customView.layer.position));
 }

注意:keyPath有一些动画是iOS内部动画,不能使用..

今天的动画就到这了~

你可能感兴趣的:(华山论剑之iOS动画)