在iOS中动画可以分为2类:UIView动画以及CALayer动画,UIView动画本质上也是CALayer动画.
UIView动画可以给UIView的部分属性添加动画:frame,bounds,center,transform,alpha,
UIVIew支持翻转以及翻页动画:UIViewAnimation Transition***.
beginAnimations:context://标记动画设置开始
commitAnimations//提交动画,开始动画
//动画会让我们的变化过程变得平缓
//对于ios4.0之前,如果想要使用动画,就必须要写在beginAnimations(动画开始)与commitAnimations(动画的结束)方法之间,动画才会有效果.
//对于UIView动画可做动画的属性有center,transform,backgroundColor,alpha,frame,bounds,
//UIView动画使用比较简单,想对哪个属性做动画,就把该属性的变化放在动画开始和动画的结束两个方法之间即可,切记,属性必须是能够做动画的属性.
//必须把对属性的配置放到属性改变之前.
//开始动画
[UIView beginAnimations:@"animation1" context:nil];
//设置动画的持续时间
[UIView setAnimationDuration:2];
//设置动画的重复次数
[UIView setAnimationRepeatCount:2];
//设置动画的延迟时间
[UIView setAnimationDelay:2];
//设置动画的逆反,默认为NO.
[UIView setAnimationRepeatAutoreverses:YES];
//设置动画效果是否有效,默认为YES
[UIView setAnimationsEnabled:YES];
//设置动画的变化效果
/**
* 1.UIViewAnimationCurveLinear 匀速
2.UIViewAnimationCurveEaseInOut 开始和结束的时候较慢,中间较慢
3.UIViewAnimationCurveEaseIn (淡入)开始较慢
4.UIViewAnimationCurveEaseOut (淡出)结束较慢
*/
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
view.center=CGPointMake(200, 200);
//设置动画的代理
[UIView setAnimationDelegate:self];
//设置动画将要开始时触发的方法
[UIView setAnimationWillStartSelector:@selector(animationWillStart:context:)];
//设置动画已经结束后触发的方法
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
//结束动画
[UIView commitAnimations];
//animationID用来标识唯一标记
//动画将要开始时触发
- (void)animationWillStart:(NSString *)animationID context:(void *)context
{
// NSLog(@"startAnimation");
}
//动画已经结束后触发
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
//[view removeFromSuperview];
// NSLog(@"stopAnimation");
if ([animationID isEqual:@"animation1"]) {
NSLog(@"蓝欧");
}
else if([animationID isEqual:@"animation2"])
{
NSLog(@"科技");
}
}
CALayer是iOS中界面显示的基础,所有的界面元素都继承自它.UIView有一个readonly的属性就是layer.CALayer同样也由frame,bounds,backgroundColor属性.
可以通过UIView的layer属性,给视图添加阴影,边框效果.
layer特有的两个重要属性anchorPoint锚点和position位置
锚点默认是在视图中心点,值为(0.5,0.5),左上角值为(0,0).
position是锚点基于父视图原点的位置.修改postion,锚点不变,但frame会变化.
修改锚点,position不变,但frame会变化.
Layer是所有动画触发的核心.UIView动画都源自Layer.Layer动画有透明,漂浮,视图缩放等.
//对于CALayer的属性做动画,也就是我们的CA动画(CAAnimation),只是一个动画的假象而已,并不是完全改变属性的值.
//对于UIView的属性动画,做完动画之后,属性的值也被修改了.
//keyPath:设置对CALayer的哪个属性进行更改,只填写属性名即可
CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@"position.y"];
//设置动画的持续时间
[basicAnimation setDuration:3];
NSNumber *fromValue=[NSNumber numberWithFloat:10];
NSNumber *toValue=[NSNumber numberWithFloat:400];
basicAnimation.fromValue=fromValue;
basicAnimation.toValue=toValue;
//初始化CA动画之后,一定要记住对哪个view的layer层做动画,
//给layer添加动画
[view.layer addAnimation:basicAnimation forKey:nil];
//为view设置圆角,为超出view的部分裁剪掉.
view.layer.cornerRadius = 20;
//view.layer.masksToBounds = YES;
//设置view边框的宽度
view.layer.borderWidth = 2;
// view.layer.opacity=10; //阴影的颜色
// view.layer.shadowColor=[UIColor yellowColor].CGColor;
//设置阴影的透明度,默认为0.如果想要让阴影显示,必须关闭maskToBounds,然后将阴影的透明度设置为一个不为零的一个数
// view.layer.shadowOpacity=1;
//设置view边框的颜色
// view.layer.borderColor = [UIColor brownColor].CGColor;
//view.layer.position=CGPointMake(200, 200);
// view.transform=CGAffineTransformRotate(view.transform, M_PI_4);
// //设置view的锚点,有四个值,(0,0),(0,1),(1,0),(1,1).
// view.layer.anchorPoint=CGPointMake(0.5,0.5);
CA动画 CA是CoreAnimation的缩写,里面封装了iOS全部的动画效果.常见的动画类:CABasicAnimation,CAKeyFrameAnimation,CATransition等.
//如果想在block块中修改变量名,可以用__block声明变量.
// __block int n = 9;
// int (^ TestBlock)(int x)=^(int x){
// n =10;
// return x;
// };
// int number=TestBlock(5);
// NSLog(@"%d",number);
//基于block的动画,其实是对之前不适用block语法的动画的进一步封装,只需要调用一个方法就可以配置多个动画效果.[UIView animateWithDuration:3 animations:^{
// 只在animations括号内封装了[UIView beginAnimation:context:];以及[UIView commitAnimations]方法.
//view.center=CGPointMake(200, 200);
}];
//页面间过度动画
[UIView transitionFromView:view toView:view1 duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:^(BOOL finished){
}];