对齐我的 UIView 的 CAShapeLayer 中心

Aligning CAShapeLayer center of my UIView

几天来我一直在努力解决这个问题,none 的建议解决了我的问题。我在 UITableView 中有一个 UIView。我一直试图在我的 UIView 中画出我的 CAShapeLayer,但我就是画不对。

我需要我的黄色 CAShapeLayer 正好位于灰色 UIView 的中心。

func DrawActivityRect(cell: CalorieDashboardTVCell){
    let rectangle = UIBezierPath(rect: cell.calorieBurnUIView.bounds)

    let trackLayer = CAShapeLayer()
    trackLayer.frame = cell.calorieBurnUIView.bounds
    trackLayer.path = rectangle.cgPath
    trackLayer.position = cell.calorieBurnUIView.center
    trackLayer.strokeColor = UIColor.yellow.cgColor
    trackLayer.lineWidth = 10
    trackLayer.fillColor = UIColor.clear.cgColor
    trackLayer.lineCap = kCALineCapRound
    cell.calorieBurnUIView.layer.addSublayer(trackLayer)
}

结果:

我怀疑设置图层后单元格大小发生变化。最容易解决这个问题的地方是单元格的 layoutSubviews()。由于您的路径使用的是绝对坐标,因此您需要同时更新图层框架和路径。

override func layoutSubviews() {
    super.layoutSubviews()

    // You need to keep trackLayer around after you created it
    let rectangle = UIBezierPath(rect: cell.calorieBurnUIView.bounds)
    self.trackLayer.frame = cell.calorieBurnUIView.bounds
    self.trackLayer.path = rectangle.cgPath
    self.trackLayer.position = cell.calorieBurnUIView.center
}