你要搞清楚自己人生的剧本——不是你父母的续集,不是你子女的前传,更不是你朋友的外篇。 --栋哥
做了这么长时间的iOS的开发,越来越发现一个问题,那就是iOS的动画的问题,一个好的APP一定要有一个完美的UI界面和使人们舒服的动画效果,但是前几次我所负责的项目所做的动画效果并不能是我满意,因为APP中的controller的跳转还有一些效果都没有达到预期的效果程度,今天接着这篇文章,我就说一说关于动画的一些事情.
在iOS当中,很多的属性可是设置动画效果,比如backgroundColor,bounds,frames,今天就从三个方面来说一下这个动画 分别是UIView动画,CALayer动画,转场动画.
我们动画的效果把.
图画的旋转.
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内部动画,不能使用..
今天的动画就到这了~
网友评论