粒子雪花效果
效果 粒子 雪花
2023-09-14 08:57:30 时间
粒子雪花效果
效果
源码
https://github.com/YouXianMing/Animations
// // EmitterSnowController.m // Animations // Created by YouXianMing on 15/12/21. // Copyright © 2015年 YouXianMing. All rights reserved. #import "EmitterSnowController.h" @interface EmitterSnowController () @property (nonatomic, strong) CALayer *movedMask; @implementation EmitterSnowController - (void)viewDidLoad { [super viewDidLoad]; - (void)setup { [super setup]; self.backgroundView.backgroundColor = [UIColor blackColor]; // 创建粒子Layer CAEmitterLayer *snowEmitter = [CAEmitterLayer layer]; // 粒子发射位置 snowEmitter.emitterPosition = CGPointMake(120,0); // 发射源的尺寸大小 snowEmitter.emitterSize = self.contentView.bounds.size; // 发射模式 snowEmitter.emitterMode = kCAEmitterLayerSurface; // 发射源的形状 snowEmitter.emitterShape = kCAEmitterLayerLine; // 创建雪花类型的粒子 CAEmitterCell *snowflake = [CAEmitterCell emitterCell]; // 粒子的名字 snowflake.name = @"snow"; // 粒子参数的速度乘数因子 snowflake.birthRate = 20.0; snowflake.lifetime = 120.0; // 粒子速度 snowflake.velocity =10.0; // 粒子的速度范围 snowflake.velocityRange = 10; // 粒子y方向的加速度分量 snowflake.yAcceleration = 2; // 周围发射角度 snowflake.emissionRange = 0.5 * M_PI; // 子旋转角度范围 snowflake.spinRange = 0.25 * M_PI; snowflake.contents = (id)[[UIImage imageNamed:@"snow"] CGImage]; // 设置雪花形状的粒子的颜色 snowflake.color = [[UIColor whiteColor] CGColor]; snowflake.redRange = 2.f; snowflake.greenRange = 2.f; snowflake.blueRange = 2.f; snowflake.scaleRange = 0.6f; snowflake.scale = 0.7f; snowEmitter.shadowOpacity = 1.0; snowEmitter.shadowRadius = 0.0; snowEmitter.shadowOffset = CGSizeMake(0.0, 0.0); // 粒子边缘的颜色 snowEmitter.shadowColor = [[UIColor whiteColor] CGColor]; // 添加粒子 snowEmitter.emitterCells = @[snowflake]; // 将粒子Layer添加进图层中 [self.contentView.layer addSublayer:snowEmitter]; // 形成遮罩 UIImage *image = [UIImage imageNamed:@"alpha"]; _movedMask = [CALayer layer]; _movedMask.frame = (CGRect){CGPointZero, image.size}; _movedMask.contents = (__bridge id)(image.CGImage); _movedMask.position = self.contentView.center; snowEmitter.mask = _movedMask; // 拖拽的View UIView *dragView = [[UIView alloc] initWithFrame:(CGRect){CGPointZero, image.size}]; dragView.center = self.contentView.center; [self.contentView addSubview:dragView]; // 给dragView添加拖拽手势 UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; [dragView addGestureRecognizer:recognizer]; - (void)handlePan:(UIPanGestureRecognizer *)recognizer { // 拖拽 CGPoint translation = [recognizer translationInView:self.contentView]; recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); [recognizer setTranslation:CGPointMake(0, 0) inView:self.contentView]; // 关闭CoreAnimation实时动画绘制(核心) [CATransaction setDisableActions:YES]; _movedMask.position = recognizer.view.center; @end
细节
雪花算法 常见的ID生成方式有好几种,其中雪花算法算是分布式系统中应用比较广泛的一种了,并且生成方法也相对简单,可以简单学习一下。
相关文章
- 滚动效果——marquee的html样式和CSS属性
- 这项最新调查劝退效果拉满:67% 的 NLPer 怀疑自己的研究没价值
- Three.js呈现3D效果机房–初步方案[通俗易懂]
- 【罗盘时钟—使用html,js,css编写。附源代码及效果】
- 好看的table css样式_html漂亮表格效果
- (十四)51单片机——LCD1602实现滚动效果
- 滚动视差网页效果
- Android 纵向跑马灯滚动效果详解手机开发
- input标签设置disabled=”disabled”属性的效果详解编程语言
- 微软商店在Win11上获得了新的动画效果
- 结构最佳使用Redis点赞哪种数据结构最能达到最佳效果(点赞用redis哪种数据)
- javascript跟随鼠标的文字带滚动效果
- 原生JS可拖动弹窗效果实例代码
- 基于jquery实现的文字向上跑动类似跑马灯的效果
- C#WinForm实现Win7Aero透明效果代码