使用Swift 4在iOS中自定义循环进度栏

在开始之前,让我先向您展示我们所需的输出!

当点击圆圈时,进度动画应该开始!

开始编码前要考虑的几件事!

  • 我们需要两层,一层用于循环层,另一层用于进度层。
  • 圆环层和进度层都可以从相同的UIBezierPath中绘制。
  • 通过使用strokeEnd属性,我们可以处理Progress Animation。
  • 通过点击圆圈,进度动画应该开始!

让我们拍摄我们的Xcode:]

  • 创建一个新的Xcode项目并使用您喜欢的名称创建一个新的swift文件!
 导入UIKit 
  class CircularProgressView:UIView { 
  //首先创建两个图层属性 
 私人var circleLayer = CAShapeLayer() 
私人var progressLayer = CAShapeLayer()
 覆盖init(frame:CGRect){ 
  super.init(frame:框架) 
  createCircularPath() 
  } 
 需要初始化吗?(编码器aDecoder:NSCoder){ 
  super.init(编码器:aDecoder) 
  createCircularPath() 
  } 
  func createCircularPath(){ 
 让CircularPath = UIBezierPath(arcCenter:CGPoint(x:frame.size.width / 2.0,y:frame.size.height / 2.0),半径:80,startAngle:-.pi / 2,endAngle:2 * .pi,顺时针:正确) 
  circleLayer.path = CircularPath.cgPath 
  circleLayer.fillColor = UIColor.clear.cgColor 
  circleLayer.lineCap = .round 
  circleLayer.lineWidth = 20.0 
  circleLayer.strokeColor = UIColor.black.cgColor 
  progressLayer.path = CircularPath.cgPath 
  progressLayer.fillColor = UIColor.clear.cgColor 
  progressLayer.lineCap = .round 
  progressLayer.lineWidth = 10.0 
  progressLayer.strokeEnd = 0 
  progressLayer.strokeColor = UIColor.red.cgColor 
  layer.addSublayer(circleLayer) 
  layer.addSublayer(progressLayer) 
  } 
  func progressAnimation(持续时间:TimeInterval){ 
 让CircularProgressAnimation = CABasicAnimation(keyPath:“ strokeEnd”) 
  CircularProgressAnimation.duration =持续时间 
  CircularProgressAnimation.toValue = 1.0 
  CircularProgressAnimation.fillMode = .forwards 
  CircularProgressAnimation.isRemovedOnCompletion =否 
  progressLayer.add(circularProgressAnimation,forKey:“ progressAnim”) 
  } 
  }