import UIKit

class CVLayerView: UIView {

var pulseLayer : CAShapeLayer!  //定义图层

override init(frame: CGRect) {

super.init(frame: frame)

let width = self.bounds.size.width

// 动画图层

pulseLayer = CAShapeLayer()

pulseLayer.bounds = CGRect(x: 0, y: 0, width: width, height: width)

pulseLayer.position = CGPoint(x: width/2, y: width/2)

pulseLayer.backgroundColor = UIColor.clear.cgColor

// 用BezierPath画一个原型

pulseLayer.path = UIBezierPath(ovalIn: pulseLayer.bounds).cgPath

// 脉冲效果的颜色  (注释*1)

pulseLayer.fillColor = UIColor.init(r: 213, g: 54, b: 13).cgColor

pulseLayer.opacity = 0.0

// 关键代码

let replicatorLayer = CAReplicatorLayer()

replicatorLayer.bounds = CGRect(x: 0, y: 0, width: width, height: width)

replicatorLayer.position = CGPoint(x: width/2, y: width/2)

replicatorLayer.instanceCount = 3  // 三个复制图层

replicatorLayer.instanceDelay = 1  // 频率

replicatorLayer.addSublayer(pulseLayer)

self.layer.addSublayer(replicatorLayer)

self.layer.insertSublayer(replicatorLayer, at: 0)

}

func starAnimation() {

// 透明

let opacityAnimation = CABasicAnimation(keyPath: "opacity")

opacityAnimation.fromValue = 1.0  // 起始值

opacityAnimation.toValue = 0     // 结束值

// 扩散动画

let scaleAnimation = CABasicAnimation(keyPath: "transform")

let t = CATransform3DIdentity

scaleAnimation.fromValue = NSValue(caTransform3D: CATransform3DScale(t, 0.0, 0.0, 0.0))

scaleAnimation.toValue = NSValue(caTransform3D: CATransform3DScale(t, 1.0, 1.0, 0.0))

// 给CAShapeLayer添加组合动画

let groupAnimation = CAAnimationGroup()

groupAnimation.animations = [opacityAnimation,scaleAnimation]

groupAnimation.duration = 3   //持续时间

groupAnimation.autoreverses = false //循环效果

groupAnimation.repeatCount = HUGE

groupAnimation.isRemovedOnCompletion = false

pulseLayer.add(groupAnimation, forKey: nil)

}

required init?(coder aDecoder: NSCoder) {

super.init(coder: aDecoder)

}

}

使用方法

let waveView = CVLayerView(frame: CGRect(x: margin*CGFloat(index)*2+margin/2, y: 10, width: margin, height: margin))

waveView.center = button.center

// 因为我的VC是XIB  所以将图层添加在到按钮之下 一般用法就直接addSubview就可以了

//                self.insertSubview(waveView, belowSubview: button)

self.addSubview(waveView)

waveView.starAnimation()  // 开始动画

swift之水纹动画的更多相关文章

  1. Swift - transform.m34动画示例

    Swift - transform.m34动画示例 效果 源码 https://github.com/YouXianMing/Swift-Animations // // CATransform3DM ...

  2. Swift 表视图动画教程: Drop-In Cards

    http://www.raywenderlich.com/76024/swift-table-view-animations-tutorial-drop-cards 标准 table view 是一个 ...

  3. swift - 歌曲列表动画

    // //  ViewController.swift //  songAnimation // //  Created by su on 15/12/10. //  Copyright © 2015 ...

  4. iOS开发——动画篇Swift篇&常用动画总结

    UIView动画: UIView动画时最基本的动画,是直接对我们界面上控件进行简单的动画效果实现,如果你只需要用到一些简单的效果,那么这个很适合你,关于UIView动画实现恨简单, UIKit直接将动 ...

  5. swift 之SnapKit 动画

    这个问题纠结了我挺长时间的.一直以为把约束直接添加到动画里面就可以了.但是并没那么简单.-.-其实还是挺简 class ViewController: UIViewController { @IBOu ...

  6. swift 头尾式动画

    1.0 头尾式动画 UIView.beginAnimations(nil, context: nil) UIView.setAnimationDuration(1.0) // 设置执行动画所需要的时间 ...

  7. swift 设置图片动画组 iOS11之前 默认图片 设置不成功

    在iOS 11 上, 1.先执行动画组 在设置图片执行帧动画,2.先设置图片在设置帧动画,执行帧动画  没有任何问题 在iOS 10和iOS9上,必须 执行 方法二(先设置图片在设置帧动画,执行帧动画 ...

  8. 你会用swift创建复杂的加载动画吗(1)

    时至今日,iOS 应用商店已经拥有超过了140万 应用,让你自己的应用脱颖而出确实是个不小的挑战.不过,在你的应用掉入默默无闻的大黑洞之前,你拥有一个小小的机遇窗,它能帮你吸引用户的注意. AD: 时 ...

  9. iOS - 开源框架、项目和学习资料汇总(动画篇)

    动画 1. Core Animation笔记,基本的使用方法 – Core Animation笔记,基本的使用方法:1.基本动画,2.多步动画,3.沿路径的动画,4.时间函数,5.动画组.2. awe ...

随机推荐

  1. 【Luogu4448】 [AHOI2018初中组]球球的排列

    题意 有 \(n\) 个球球,每个球球有一个属性值 .一个合法的排列满足不存在相邻两个球球的属性值乘积是完全平方数.求合法的排列数量对 \(10^9+7\) 取膜. \(n\le 300\) (本题数 ...

  2. CPU、内存、硬盘之间的关系

    要完完全全地讲清楚cpu.内存.硬盘之间的关系,博客的篇幅是不够的.这里简单的介绍以下它们之间的关系,抛砖引玉. 1.CPU即中央处理器,是英语“Central Processing Unit”的缩写 ...

  3. git 创建分支并提交代码

    1.查看所有分支 git branch -a 2.查看当前分支 git branch 3.新建一个分支 git branch feature-xx 4.切换到新建分支上面 git checkout f ...

  4. ROS常用库(二) Serial库(单片机和上位机串口通讯)

    比如我们做了个单片机,在win里面用串口调试助手接收和下发数据,那么在ubuntu里用ros怎么实现?换个说法,怎么实现上位机和下位机的通讯? 首先,用python自带的库就可以实现这个功能. 安装p ...

  5. Springboot---显示图片/字符串/map集合/list集合

    1.字符串/图片/map集合 @GetMapping("/hello") public String test(Model model){ String message=" ...

  6. TP5分页函数paginate中的each()传参

    在使用each()时,each()里面只能使用局部变量,当使用外部变量时会报未定义变量的错误,但是有时候我们还必须使用外部变量,就需要想是时作用域的问题,但是如果使用 global 全局虽然不报错,但 ...

  7. 洛谷P1000 超级玛丽游戏(洛谷新手村1-1-1)

    题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...

  8. 利用ZXing.Net生成和识别二维码

    ZXing.Net:ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库. github:https://github.com/micjahn/ZXing.Net 直接将字符 ...

  9. 吴裕雄--天生自然java开发常用类库学习笔记:StringBuffer

    public class StringBufferDemo01{ public static void main(String args[]){ StringBuffer buf = new Stri ...

  10. 如何用hugo搭建个人博客

    如何用hugo搭建个人博客 1. 安装 Hugo 点击跳转 Hugo Releases win10 步骤: 下载解压 , 然后添加环境变量 测试: #命令行测试 hugo version 2. 创建站 ...