美文网首页iOS Developer
iOS, swift3.0 实现雷达效果

iOS, swift3.0 实现雷达效果

作者: FaiChou | 来源:发表于2017-05-22 16:14 被阅读111次

    🐷 效果

    QQ20170522-160622-HD.gif

    🐥 代码

    /// ViewController.swift
    import UIKit
    
    class ViewController: UIViewController {
      
      lazy var roundView: RoundedView = {
        let v = RoundedView()
        v.backgroundColor = .blue
        v.frame = CGRect(x: 100, y: 100, width: 50, height: 50)
        v.layer.addSublayer(self.radarLayer)
        return v
      }()
      let radarLayer: RadarLayer = {
        let l = RadarLayer()
        l.repeatTime = 3.0
        l.radius = 26
        l.backgroundColor = UIColor.red.cgColor
        l.position = CGPoint(x: 25, y: 25)
        return l
      }()
      
      override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(roundView)
      }
    }
    
    class RoundedView: UIView {
      override func layoutSubviews() {
        super.layoutSubviews()
        let radius: CGFloat = self.bounds.size.height / 2.0
        self.layer.cornerRadius = radius
    //    self.clipsToBounds = true
      }
    }
    
    
    /// RadarLayer.swift
    import Foundation
    import UIKit
    import QuartzCore
    
    class RadarLayer: CALayer {
      
      //MARK: - variables
      var radius: CGFloat = 10 {
        didSet {
          let width = radius * 2
          let position = self.position
          self.bounds = CGRect(x: 0, y: 0, width: width, height: width)
          self.cornerRadius = radius
          self.position = position
        }
      }
      var repeatTime: TimeInterval = 4
      var delayTime: TimeInterval = 0
      var animationGroup: CAAnimationGroup?
      
      //MARK: - life cycle
      required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
      }
      override init() {
        super.init()
        contentsScale = UIScreen.main.scale
        opacity = 0
        backgroundColor = UIColor.white.cgColor
        DispatchQueue.global(qos: .default).async {
          self.setupAnimation()
          if self.delayTime != TimeInterval.infinity {
            DispatchQueue.main.async {
              self.add(self.animationGroup!, forKey: "pulse")
            }
          }
        }
      }
      
      func setupAnimation() {
        let defaultCurve = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
        self.animationGroup = CAAnimationGroup()
        self.animationGroup?.duration = self.repeatTime + self.delayTime
        self.animationGroup?.repeatCount = Float.infinity
        self.animationGroup?.isRemovedOnCompletion = false
        self.animationGroup?.timingFunction = defaultCurve
        
        let scaleAnimation = CABasicAnimation(keyPath: "transform.scale.xy")
        scaleAnimation.fromValue = 0.0
        scaleAnimation.toValue = 1.2
        scaleAnimation.duration = self.repeatTime
        
        let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity")
        opacityAnimation.duration = self.repeatTime
        opacityAnimation.values = [0.2, 0.45, 0.5, 0]
        opacityAnimation.keyTimes = [0, 0.20, 0.6, 1]
        opacityAnimation.isRemovedOnCompletion = false
        
        let animations = [scaleAnimation, opacityAnimation]
        self.animationGroup?.animations = animations
      }
      
    }
    
    

    相关文章

      网友评论

        本文标题:iOS, swift3.0 实现雷达效果

        本文链接:https://www.haomeiwen.com/subject/toxixxtx.html