iOS动画-2

#pragma mark------iOS动画

- (void)initAnimation{

/*-----------组动画CAAnimationGroup--------*/

/*

CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行。

重要属性

animations: 用来保存一组动画对象的NSArray

*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor yellowColor];

//    animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-25, 50, 50);

//

//    CAKeyframeAnimation* keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

//    NSValue* value1 = [NSValue valueWithCGPoint:CGPointMake(0, screenHeight/2-50)];

//    NSValue* value2 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3, screenHeight/2-50)];

//    NSValue* value3 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3, screenHeight/2+50)];

//    NSValue* value4 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3*2, screenHeight/2+50)];

//    NSValue* value5 = [NSValue valueWithCGPoint:CGPointMake(screenWidth/3*2, screenHeight/2-50)];

//    NSValue* value6 = [NSValue valueWithCGPoint:CGPointMake(screenWidth, screenHeight/2-50)];

//    keyFrameAnimation.values = [NSArray arrayWithObjects:value1,value2,value3,value4,value5,value6, nil];

//

//    //缩放动画

//    CABasicAnimation* basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

//    basicAnimation.fromValue = [NSNumber numberWithFloat:0.1f];

//    basicAnimation.toValue = [NSNumber numberWithFloat:2.0f];

//

//    //旋转动画

//    CABasicAnimation* rotAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

//    rotAnimation.toValue = [NSNumber numberWithFloat:4*M_PI];

//

//    //组动画

//    CAAnimationGroup* groupAnimation = [CAAnimationGroup animation];

//    groupAnimation.animations = [NSArray arrayWithObjects:keyFrameAnimation,basicAnimation,rotAnimation, nil];

//    groupAnimation.duration = 8.0f;

//    [animationView.layer addAnimation:groupAnimation forKey:@"groupAnimation"];

/*----------------------过渡动画CATransition------------------------------------------------*/

/*CATransition的子类,用于做过渡动画或者转场动画,能够为层提供移出屏幕和移入屏幕的动画效果

重要属性:type:动画过渡类型

Apple官方的SDK其实只提供了四种过渡效果

kCATransitionFade 渐变效果

kCATransitionMoveIn 进入覆盖效果

kCATransitionPush 推出效果

kCATransitionReveal 揭露离开效果

subtype:动画过渡方向

kCATransitionFromRight 从右侧进入

kCATransitionFromLeft 从左侧进入

kCATransitionFromTop 从顶部进入

kCATransitionFromBottom 从底部进入

startProgress:动画起点(在整体动画的百分比)

endProgress:动画终点(在整体动画的百分比)

*/

/*烟花效果  使用的是一种比较特殊的动画---粒子动画*/

/*

一个粒子系统一般有两部分组成

1.CAEmitterCell:可以看作是单个粒子的原型,如:一个单一的粉扑在一团烟雾。当散发出一个粒子,UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色、方向、运动,缩放比例和生命周期

2.CAEmitterLayer:主要控制发射源的位置、尺寸、发射模式、发射源的形状等等。他是一个高性能的粒子引擎,被用来创建复杂的粒子动画如:烟雾、火、雨等效果,并且很好的控制了性能

CAEmitterLayer就像大炮,决定了(1)哪里发射(2)大炮有多大

CAEmitterCell就像是炮弹,觉得了(1)初速度(2)加速度(3)炮弹类型(4)发射后的角度 等等

首先提醒CAEmitterLayer本身没有什么难度,主要在于两点:

属性较多(一会会把属性都列举出来,不知道了随时查阅就是)

调参数比较费时(想要有好的动画效果还得慢慢的去调整各项参数,不过没有难度就是有点费时间)

平常用的多的比如 emitterShape 的 kCAEmitterLayerLine 和 kCAEmitterLayerPoint。这两个从视觉上还是比较好区分的,这决定了你的粒子是从一个点「喷」出来的,还是从一条线上每个点「喷」下来,前者像焰火,后者像瀑布。显然,下雪的效果更像后者。

emitterMode 的 kCAEmitterLayerOutline 表示向外围扩散,如果你的发射源形状是 circle,那么 kCAEmitterLayerOutline 就会以一个圆的方式向外扩散开。

又比如你想表达一股蒸汽向上喷的效果,就可以设置 emitterShape 为 kCAEmitterLayerLine , emitterMode 为 kCAEmitterLayerOutline。

CAEmitterCell(炮弹)的属性

其实CAEmitterCell真是的名字叫粒子

3.

*/

/*总结--任何复杂的动画都是有一个个简单的动画组装的,只要我们善于分解和组装,就能实现满意的效果*/

/*一些常用的animationWithKeyPath值的总结

值 说明 使用形式

transform.scale 比例转化 @(0.8)

transform.scale.x 宽的比例 @(0.8)

transform.scale.y 高的比例 @(0.8)

transform.rotation.x 围绕x轴旋转 @(M_PI)

transform.rotation.y 围绕y轴旋转 @(M_PI)

transform.rotation.z 围绕z轴旋转 @(M_PI)

cornerRadius 圆角的设置 @(50)

backgroundColor 背景颜色的变化 (id)[UIColor purpleColor].CGColor

bounds 大小,中心不变 [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];

position 位置(中心点的改变) [NSValue valueWithCGPoint:CGPointMake(300, 300)];

contents 内容,比如UIImageView的图片 imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage;

opacity 透明度 @(0.7)

contentsRect.size.width 横向拉伸缩放 @(0.4)最好是0~1之间的

*/

/*---------背景颜色--------透明度-----------*/

//        UIView* animationView = [[UIView alloc]init];

//        [self.view addSubview:animationView];

//        animationView.backgroundColor = [UIColor blueColor];

//        animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-25, 50, 50);

//

//        CABasicAnimation* backgroudColor = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];//背景色

//        backgroudColor.fromValue = (id)[UIColor redColor].CGColor;

//        backgroudColor.toValue = (id)[UIColor yellowColor].CGColor;

//

//        CABasicAnimation* viewAplha = [CABasicAnimation animationWithKeyPath:@"opacity"];//透明度

//        viewAplha.fromValue = @(0.1);

//      viewAplha.toValue = @(0.7);

//

//        //组动画

//        CAAnimationGroup* groupAnimation = [CAAnimationGroup animation];

//        groupAnimation.animations = [NSArray arrayWithObjects:backgroudColor,viewAplha, nil];

//        groupAnimation.duration = 8.0f;

//        [animationView.layer addAnimation:groupAnimation forKey:@"groupAnimation"];

//

/*-----------------------------粒子动画-----------------------------------------------*/

CAEmitterLayer* snowEmitter = [CAEmitterLayer layer];//创建一个CAEmitterLayer--也就是大炮

snowEmitter.emitterPosition = CGPointMake(80, 180);//指定发射源的位置

snowEmitter.masksToBounds = NO;//不修改边界

//    snowEmitter.emitterSize = CGSizeMake(snowEmitter.frame.size.width/2.0, snowEmitter.frame.size.height/2.0);//指定发射源的大小

snowEmitter.emitterSize = CGSizeMake(screenWidth, screenHeight/2.0);//指定发射源的大小(也就是炮弹出现的区域)

snowEmitter.emitterShape = kCAEmitterLayerRectangle;//发射源的形状kCAEmitterLayerLine//kCAEmitterLayerCircle

snowEmitter.emitterMode = kCAEmitterLayerOutline;//发射源的模式

snowEmitter.contents =(id)[UIImage imageNamed:@"icon_payment@2x"].CGImage;

CAEmitterCell* snowFlake = [CAEmitterCell emitterCell];//创建CAEmitterCell

snowFlake.birthRate = 10.0;//每秒多少个

snowFlake.lifetime = 50.0;//存活时间

snowFlake.velocity = 10;//因为动画属于落体效果,所以我们只需要设置他在y方向上的加速度就行了。

snowFlake.velocityRange = 8;//初速度范围

snowFlake.yAcceleration = 20;//y方向的加速度

snowFlake.xAcceleration = 20;

snowFlake.alphaSpeed = -0.4;

snowFlake.emissionRange = 8*M_PI;//以锥形分布开的发射角度。角度用弧度制。粒子均匀分布在这个锥形范围内。

snowFlake.contents = (id)[UIImage imageNamed:@"icon_payment@2x"].CGImage;//cell的内容。通常是一个指针CGImageRef。

//    snowFlake.contents = (id)[UIColor redColor].CGColor;

snowFlake.scale = 0.5;//缩小

snowFlake.emissionLatitude = M_PI_2;//发射角度

snowFlake.color = [UIColor redColor].CGColor;

snowEmitter.emitterCells = [NSArray arrayWithObject:snowFlake];

[self.view.layer addSublayer:snowEmitter];//把粒子动画所添加的视图

}

你可能感兴趣的:(iOS动画-2)