动画效果在我们的App用的不多,但确是很有意思的一个点,今天就来介绍一个非常牛X的动画效果,不吹不黑,保证会让你学到很多。
![Uploading 屏幕快照 2016-07-25 下午8.59.39_708364.png . . .]
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)CALayer *layer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 创建粒子Layer
CAEmitterLayer *starStar = [CAEmitterLayer layer];
// 粒子发射位置
starStar.emitterPosition = CGPointMake(120,0);
// 发射源的尺寸大小
// starStar.emitterSize = self.view.bounds.size;
starStar.emitterSize = CGSizeMake(300, 400);
// 发射模式
//layerPoints是聚焦点发送,左上角落下的散射模式
//kCAEmitterLayerOutline 没有超出线条,顶部截取,有明显的横截面
//kCAEmitterLayerSurface 无截取面,采用了全面,完整
//kCAEmitterLayerVolume 上移整体
starStar.emitterMode = kCAEmitterLayerVolume;
// 发射源的形状
/**
kCAEmitterLayerRectangle
CA_EXTERN NSString * const kCAEmitterLayerCuboid
CA_EXTERN NSString * const kCAEmitterLayerCircle
CA_EXTERN NSString * const kCAEmitterLayerSphere
*/
starStar.emitterShape = kCAEmitterLayerLine;
// 创建雪花类型的粒子
CAEmitterCell *starFlake = [CAEmitterCell emitterCell];
// 粒子的名字
starFlake.name = @"snow";
// 粒子参数的速度乘数因子
starFlake.birthRate = 20.0;
starFlake.lifetime = 120.0;
// 粒子速度 -即速度越快 数量越少
starFlake.velocity = 20;
// 粒子的速度范围
starFlake.velocityRange = 20;
// 粒子y方向的加速度分量
starFlake.yAcceleration = 1;
// 周围发射角度
starFlake.emissionRange = 0.5 * M_PI;
// 子旋转角度范围
starFlake.spinRange = 0.25 * M_PI;
starFlake.contents = (id)[[UIImage imageNamed:@"yellow"] CGImage];
// 设置雪花形状的粒子的颜色
starFlake.color = [[UIColor whiteColor] CGColor];
starFlake.redRange = 1.5f;
starFlake.greenRange = 2.2f;
starFlake.blueRange = 2.2f;
starFlake.scaleRange = 0.6f;
starFlake.scale = 0.7f;
starStar.shadowOpacity = 1.0;
starStar.shadowRadius = 0.0;
starStar.shadowOffset = CGSizeMake(0.0, 0.0);
// 粒子边缘的颜色
starStar.shadowColor = [[UIColor whiteColor] CGColor];
// 添加粒子
starStar.emitterCells = @[starFlake];
// 将粒子Layer添加进图层中
[self.view.layer addSublayer:starStar];
// 形成遮罩
UIImage *image = [UIImage imageNamed:@"bg_main"];
_layer = [CALayer layer];
_layer.frame = (CGRect){CGPointZero, self.view.bounds.size};
_layer.contents = (__bridge id)(image.CGImage);
_layer.position = self.view.center;
starStar.mask = _layer;
}
@end