zoukankan      html  css  js  c++  java
  • 给视图添加点击波纹效果swift5

    给视图添加点击波纹效果

    import UIKit
     
    class ViewController: UIViewController {
        
        private let radarAnimation = "radarAnimation"
        private var animationLayer: CALayer?
        private var animationGroup: CAAnimationGroup?
     
     
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            
            let first = makeRadarAnimation(showRect: CGRect(x: 120, y: 150,  140, height: 140), isRound: true)    //位置和大小
            view.layer.addSublayer(first)
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
        //动作-开始
        @IBAction func startAction(_ sender: UIButton) {
            animationLayer?.add(animationGroup!, forKey: radarAnimation)
        }
        //动作-停止
        @IBAction func stopAction(_ sender: UIButton) {
            animationLayer?.removeAnimation(forKey: radarAnimation)
        }
        
        private func makeRadarAnimation(showRect: CGRect, isRound: Bool) -> CALayer {
            // 1. 一个动态波
            let shapeLayer = CAShapeLayer()
            shapeLayer.frame = showRect
            // showRect 最大内切圆
        
            shapeLayer.path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0,  showRect.width, height: showRect.height)).cgPath
            
            shapeLayer.fillColor = UIColor.white.cgColor    //波纹颜色
           
            shapeLayer.opacity = 0.0    // 默认初始颜色透明度
            
            animationLayer = shapeLayer
            
            // 2. 需要重复的动态波,即创建副本
            let replicator = CAReplicatorLayer()
            replicator.frame = shapeLayer.bounds
            replicator.instanceCount = 4
            replicator.instanceDelay = 1.0
            replicator.addSublayer(shapeLayer)
            
            // 3. 创建动画组
            let opacityAnimation = CABasicAnimation(keyPath: "opacity")
            opacityAnimation.fromValue = NSNumber(floatLiteral: 1.0)  // 开始透明度
            opacityAnimation.toValue = NSNumber(floatLiteral: 0)      // 结束时透明底
            
            let scaleAnimation = CABasicAnimation(keyPath: "transform")
            if isRound {
                scaleAnimation.fromValue = NSValue.init(caTransform3D: CATransform3DScale(CATransform3DIdentity, 1.0, 1.0, 0))      // 缩放起始大小
            } else {
                scaleAnimation.fromValue = NSValue.init(caTransform3D: CATransform3DScale(CATransform3DIdentity, 1.5, 1.5, 0))      // 缩放起始大小
            }
            scaleAnimation.toValue = NSValue.init(caTransform3D: CATransform3DScale(CATransform3DIdentity, 2.0, 2.0, 0))      // 缩放结束大小
            
            let animationGroup = CAAnimationGroup()
            animationGroup.animations = [opacityAnimation, scaleAnimation]
            animationGroup.duration = 3.0       // 动画执行时间
            animationGroup.repeatCount = HUGE   // 最大重复
            animationGroup.autoreverses = false
            
            self.animationGroup = animationGroup
            
            shapeLayer.add(animationGroup, forKey: radarAnimation)
            
            return replicator
        }
     
     
    }
  • 相关阅读:
    POJ 3680_Intervals
    POJ 3680_Intervals
    POJ 3686_The Windy's
    POJ 3686_The Windy's
    Codeforces 629C Famil Door and Brackets
    Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
    Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
    Codeforces 628F Bear and Fair Set
    18.04.26 魔兽世界终极版
    18.4.20 STL专项练习8选6
  • 原文地址:https://www.cnblogs.com/baitongtong/p/13734318.html
Copyright © 2011-2022 走看看