http://www.cocoachina.com/ios/20151230/14822.html


CAReplicatorLayer可以复制自己子层的layer,并且复制的出来的layer和原来的子layer拥有相同的动效。然后通过设置一些属性,就可以完成很酷的效果,非常强大。。

效果


Demo


建议先下载demo,再结合下面的分析,会好理解点。地址https://github.com/Resory/RYReplicatorLayer

逻辑


  • 本文主要讲述love动效的制作。music动效可参照love动效注释。

  • 首先我们要得到一个love路径,这个路径用UIBezierPath来制作。

  • 然后生成一个UIView,它的layer加上CAKeyframeAnimation,而CAKeyframeAnimation的路径是love路径。

  • 把UIView的layer加入CAReplicatorLayer。并对设置CAReplicatorLayer相应属性即可。

实现


  • love路径
    1
    2
    3
    4
    5
      UIBezierPath *tPath = [UIBezierPath bezierPath];
      [tPath moveToPoint:CGPointMake(SYS_DEVICE_WIDTH/2.0, 200)];
      [tPath addQuadCurveToPoint:CGPointMake(SYS_DEVICE_WIDTH/2.0, 400) controlPoint:CGPointMake(SYS_DEVICE_WIDTH/2.0 + 200, 20)];
      [tPath addQuadCurveToPoint:CGPointMake(SYS_DEVICE_WIDTH/2.0, 200) controlPoint:CGPointMake(SYS_DEVICE_WIDTH/2.0 - 200, 20)];
      [tPath closePath];
  • 生成一个UIView
    1
    2
    3
    4
      UIView *tView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
      tView.center = CGPointMake(SYS_DEVICE_WIDTH/2.0, 200);
      tView.layer.cornerRadius = 5;
      tView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
  • 给UIView添加上CAKeyframeAnimation动效
    1
    2
    3
    4
    5
      CAKeyframeAnimation *loveAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
      loveAnimation.path = tPath.CGPath;
      loveAnimation.duration = 8;
      loveAnimation.repeatCount = MAXFLOAT;
      [tView.layer addAnimation:loveAnimation forKey:@"loveAnimation"];
  • 生成一个CAReplicatorLayer,并把UIView的layer加入其中
    1
    2
    3
    4
    5
    6
    7
      _loveLayer = [CAReplicatorLayer layer];
      _loveLayer.instanceCount = 40;                // 复制39个子layer+原本的子layer共40个layer
      _loveLayer.instanceDelay = 0.2;               // 每隔0.2出现一个layer
      _loveLayer.instanceColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor;
      _loveLayer.instanceGreenOffset = -0.03;       // 颜色值递减。
      _loveLayer.instanceRedOffset = -0.02;         // 颜色值递减。
      _loveLayer.instanceBlueOffset = -0.01;        // 颜色值递减。


  • CAReplicatorLayer里面还有一个instanceTransform属性,musicLayer就是用它的instanceTransform属性做的。所以还有很多效果可以做。就看你脑洞够不够大了。

  • 如果你有疑问或者发现错误请留言给我。3Q~~

 
 

iOS - CAReplicatorLayer 的运用的更多相关文章

  1. iOS CAReplicatorLayer 实现脉冲动画效果

    iOS CAReplicatorLayer 实现脉冲动画效果 效果图 脉冲数量.速度.半径.透明度.渐变颜色.方向等都可以设置.可以用于地图标注(Annotation).按钮长按动画效果(例如录音按钮 ...

  2. iOS CAReplicatorLayer 简单动画

    代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...

  3. iOS之CAReplicatorLayer属性简介和使用

    1.CAReplicatorLayer简介 CAReplicatorLayer用于对图层进行复制,包括图层的动画也能复制!可以看着将某一段事务进行重复! #import <QuartzCore/ ...

  4. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  5. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

    下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...

  6. IOS Core Animation Advanced Techniques的学习笔记(五)

    第六章:Specialized Layers   类别 用途 CAEmitterLayer 用于实现基于Core Animation粒子发射系统.发射器层对象控制粒子的生成和起源 CAGradient ...

  7. iOS - 开发类库

    开发类库   UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...

  8. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

  9. iOS核心动画学习整理

    最近利用业余时间终于把iOS核心动画高级技巧(https://zsisme.gitbooks.io/ios-/content/chapter1/the-layer-tree.html)看完,对应其中一 ...

随机推荐

  1. C++面向对象高级编程(下)第二周-Geekband

    17,对象模型:关于vptr(vitrual Pointer)和vtbl(virtual Table) 当存在虚函数就会出现虚指针vptr指向虚函数所在位置vtbl 将vptr实现vtbl内容翻译为C ...

  2. 一些常见的synthesis attribute

    Noprune A Verilog HDL synthesis attribute that prevents the Quartus II software from removing a regi ...

  3. Server 主机屋云服务器 宝塔面板 部署nginx反向代理的vue项目

    图文记录云服务器上部署需要nginx反向代理的vue项目: 一.先登录并购买云服务器,根据自己需求购买,此处不详细介绍: 二.登录后如下图,点击进入云服务器界面: 三.在云服务器界面点击管理,进入管理 ...

  4. Larval报错:后台上传图片,storage目录也有相应的图片,但前台访问不到图片。

    需要执行命令.在public下建立文件软链接 php artisan storage:link

  5. SQL Server中存储过程与函数的区别

    本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,比如不能用临 ...

  6. Docker学习入门

    Docker简介: Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 理解了这三个概念,就理解了 Docker 的整个生命周期. Docke ...

  7. VS2005编译VTK5.10.1

    1.从官方下载源文件和数据文件解压到同一个文件夹 2.下载并安装cmake 3.打开cmake选择VTK源文件路径和编译生成路径 注意:在路径里面不能出现中文字符!(我觉得以后的路径尽可能不要有中文字 ...

  8. LINUX对于未安装的软件包的查看

    查看的前提是您有一个.rpm 的文件,也就是说对既有软件file.rpm的查看等: 1.查看一个软件包的用途.版本等信息: 语法: rpm -qpi file.rpm 举例: [root@localh ...

  9. CentOS + Nginx 的常用操作指令总结

    CentOS + Nginx 的常用操作指令总结 一. 关于CentOS 查看 yum 源是否存在 yum list | grep nginx 如果不存在 或者 不是自己想要的版本 可以自己设置Ngi ...

  10. centos7.6 安装jdk1.8

    1. 下载 jdk-8u211-linux-x64.tar.gz文件. 2. 创建/opt/soft目录,# cd /opt, # mkdir soft, #tar -zxvf  jdk-8u211- ...