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~~

 
 

最新文章

  1. .NET定时任务执行管理器开源组件–FluentScheduler
  2. [收藏]Asp.net MVC生命周期
  3. Java可视化AWT
  4. Android实现KSOAP2访问WebService
  5. PHP获取时间日期的多种方法
  6. HLG 1400 汽车比赛
  7. appium初探问题总结
  8. CKEditor 自主控制图片上传
  9. JSP基本语法--包含指令<%@include file="路径"%> <jsp:include page>
  10. mysql中OPTIMIZE TABLE的作用
  11. 03 RadioButton 单选按钮
  12. maven+springMVC(一)
  13. oracle两种分页查询
  14. ORACLE——RMAN 参数解读
  15. js处理数字加后缀w
  16. python pyenv
  17. Logstash安装和使用
  18. centos7 RTMP直播服务器搭建
  19. Nginx子域名配置
  20. BZOJ2671 : Calc

热门文章

  1. 2019-8-30-Jenkins-配置自动合并-release-分支到-master-分支
  2. [TJOI2017]城市 【树的直径+暴力+优化】
  3. Linux CentOS6.5安装Nginx1.8.0
  4. NVIDIA驱动安装、CUDA安装、cudnn安装
  5. Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]
  6. Django-rest Framework(四)
  7. 基于TensorFlow理解CNN中的padding参数
  8. 针对老式浏览器(主要是IE6、7、8)的css3-mediaqueries.js自适应布局
  9. HDU6200 mustedge mustedge mustedge
  10. web前端学习(一) j2ee环境搭配+jsp中的编码问题