iOS开发核心动画之粒子效果

一. 示意图

?绘画出一条线,点击开始有很多粒子绕着线运动,点击重绘消除粒子和线

二. 实现代码

?设计思路:自定义一个View来描述控制器的View,在View加载过程中进行初始化,给View添加手势(UIPanGestureRecognizer),将自定义View转成复制层,创建一个粒子层,添加到复制层上,并保存粒子

?监听滑动手势,记录起始点,移动过程中添加直线并重绘

三. 代码实现

1. 自定义View来描述控制器View,将控制器View转为复制层

  1. + (Class)layerClass
  2. {
  3. return [CAReplicatorLayer class];
  4. }

2. 在加载控制器View初始化

初始化过程中创建滑动手势/创建复制层和粒子层

设置复制层相关属性:赋值个数/动画延迟时间

  1. - (void)awakeFromNib
  2. {
  3. [self setup];
  4. }
  5. - (void)setup
  6. {
  7. // 1.创建手势
  8. UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
  9. // 2.添加手势
  10. [self addGestureRecognizer:pan];
  11. // 3.创建粒子复制层
  12. CAReplicatorLayer *copyLayer = (CAReplicatorLayer *)self.layer;
  13. copyLayer.instanceCount = 30;
  14. copyLayer.instanceDelay = 0.25;
  15. CALayer *layer = [[CALayer alloc] init];
  16. layer.frame = CGRectMake(-10, 0, 10, 10);
  17. layer.backgroundColor = [UIColor redColor].CGColor;
  18. [copyLayer addSublayer:layer];
  19. self.dotlayer = layer;
  20. }

3. 将创建出来的粒子保存,设置一个UIBezierPater属性

  1. /** 路径 */
  2. @property (nonatomic, strong) UIBezierPath *path;
  3. /** 粒子 */
  4. @property (nonatomic, weak) CALayer *dotlayer;

4. 监听手势进行绘线

  1. // 监听手势
  2. - (void)pan:(UIPanGestureRecognizer *)pan
  3. {
  4. // 获取当前点
  5. CGPoint curP = [pan locationInView:self];
  6. if (pan.state == UIGestureRecognizerStateBegan) { // 开始滑动
  7. // 绘制起始点
  8. [self.path moveToPoint:curP];
  9. } else if (pan.state == UIGestureRecognizerStateChanged) {
  10. // 添加直线
  11. [self.path addLineToPoint:curP];
  12. // 重绘
  13. [self setNeedsDisplay];
  14. }
  15. }

5. UIBezierPater路径懒加载

  1. // 路径懒加载
  2. - (UIBezierPath *)path
  3. {
  4. if (!_path) {
  5. UIBezierPath *path = [UIBezierPath bezierPath];
  6. _path = path;
  7. }
  8. return _path;
  9. }

6. 绘制

  1. // 绘制
  2. - (void)drawRect:(CGRect)rect {
  3. [self.path stroke];
  4. }

7. 线绘制完后点击开始,创建帧动画

  1. - (IBAction)start {
  2. // 1.创建帧动画
  3. CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
  4. anim.keyPath = @"position";
  5. anim.path = self.path.CGPath;
  6. anim.repeatCount = MAXFLOAT;
  7. anim.duration = 3;
  8. [self.dotlayer addAnimation:anim forKey:nil];
  9. }

8. 点击重绘

  1. - (IBAction)redraw {
  2. // 删除所有动画
  3. [self.dotlayer removeAllAnimations];
  4. // 销毁路径
  5. [self.path removeAllPoints];
  6. // 重绘
  7. [self setNeedsDisplay];
  8. }
时间: 2024-11-05 20:43:33

iOS开发核心动画之粒子效果的相关文章

iOS开发核心动画之时钟效果

1. 创建秒针,因秒针与用户无交换,可以用layer 1> 创建秒针 // 创建秒针 CALayer *secondLayer = [CALayer layer]; self.secondLayer = secondLayer; 2> 设置背景色/尺寸/位置 设置锚点(0.5, 0.9) // 设置背景色 secondLayer.backgroundColor = [UIColor redColor].CGColor; // 设置尺寸和位置 CGFloat clockViewH = self.

ios开发核心动画五:图标抖动效果--CAKeyframeAnimation

#import "ViewController.h" #define angle2Rad(angle) ((angle) / 180.0 * M_PI) @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageV; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //

IOS开发核心动画篇---核心动画简介

iOS开发UI篇—核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core Animation是跨平台的,可以用在Mac OS X和iOS平台. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.不阻塞主线程,可以理解为在执行动画的时候还能点击(按钮). 要注意的是,Core Animation是直接作用

IOS开发核心动画篇—转场动画和组动画

iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果 属性解析: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(在整体动画的百分比)

iOS开发-核心动画高级编程Core Animation系列(转)

iOS-Core-Animation-Advanced-Techniques 转 GitHub译文 iOS核心动画高级编程全集 iOS-核心动画高级编程/1-图层树 iOS-核心动画高级编程/2-寄宿图 iOS-核心动画高级编程/3-图层几何学 iOS-核心动画高级编程/4-视觉效果 iOS-核心动画高级编程/5-变换 iOS-核心动画高级编程/6-专有图层 iOS-核心动画高级编程/7-隐式动画 iOS-核心动画高级编程/8-显示动画 iOS-核心动画高级编程/9-图层时间 iOS-核心动画高

iOS开发核心动画之动画

一. 核心动画简述 1. Core Animation是直接作用在CALayer上的,并非UIView,因此核心动画的本质是修改图层的某个属性 2. 核心动画继承结构 3. transform的相关属性 二. 核心动画 基础动画 : CABaseicAnimation 帧动画 : CAKeyframeAnimation 组动画 : CAAnimationGroup 转场动画 : CATransition 1. 基础动画(CABaseicAnimation) 1> 创建动画 CABasicAnim

ios开发核心动画七:核心动画与UIView动画的区别

/** UIView与核心动画区别?(掌握) 1.核心动画只作用在layer. 2.核心动画看到的都是假像,它并没有去修改UIView的真实位置. 什么时候使用核心动画? 1.当不需要与用户进行交互,使用核心动画 2.当要根据路径做动画时,使用核心动画:CABasicAnimation,CAKeyFrameAnimation,两个都可以根据绘制的路径UIBizerPath来绘制路径来执行动画 3.当做转场动画时, 使用核心动画 (核心动画转场类型比较多)CATrasition或是UIView的核

iOS开发-核心动画随笔

核心动画可以让View旋转,缩放,平移(主要是操作View的layer(层)属性)但是核心动画改变的位置不是真实的位置,一切都是假象所以有时候要用到其他动画,如UIView本来封装的动画,还有定时器 // 实现图片360°旋转 CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationA

ios开发核心动画三:隐式动画与时钟效果

一:隐式动画 #import "ViewController.h" @interface ViewController () /** <#注释#> */ @property (nonatomic, weak) CALayer *layer; @property (weak, nonatomic) IBOutlet UIView *redView; @end @implementation ViewController - (void)viewDidLoad { [super