awakeFromNib中的自定义循环进度视图

时间:2018-05-16 07:44:30

标签: ios swift uiview uibezierpath cashapelayer

我使用UIBezierPath和CAShapeLayer使用以下代码创建了圆形进度视图。

.result

如果我将该代码放在我的viewDidLoad中,它可以正常工作。但是,当我从storyboard添加UIView并将其类设置为自定义类时,然后将所有代码复制到该自定义UIView类并在awakeFromNib函数中调用它无法正常工作的原因是什么?我如何使用上面的代码与自定义UIView类?

橙色视图应该是我的自定义视图我添加了前导,尾随,底部和固定高度约束它但它看起来像上面。圆圈视图是否需要放置橙色视图的中心?

1 个答案:

答案 0 :(得分:0)

实际上它有效,但它的位置错误。这种情况下的位置超出了您的视野,因此您无法看到它。它会让你认为你的代码不起作用。

如果您想在视图的中心放置圆圈。将代码放在awakeFromNib中并计算自己的中心,不要使用self.center

override func awakeFromNib() {
  let center = CGPoint.init(x: frame.width / 2, y: frame.height / 2)

  let trackLayer = CAShapeLayer()
  let shapeLayer = CAShapeLayer()

  let circularPath = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)

  trackLayer.path = circularPath.cgPath

  trackLayer.strokeColor = UIColor.lightGray.cgColor
  trackLayer.lineWidth = 10
  trackLayer.fillColor = UIColor.clear.cgColor
  trackLayer.lineCap = kCALineCapRound
  self.layer.addSublayer(trackLayer)
  shapeLayer.path = circularPath.cgPath
  shapeLayer.strokeColor = UIColor.red.cgColor
  shapeLayer.lineWidth = 10
  shapeLayer.fillColor = UIColor.clear.cgColor
  shapeLayer.lineCap = kCALineCapRound
  shapeLayer.strokeEnd = 0
  self.layer.addSublayer(shapeLayer)
}

结果

enter image description here