对齐我的 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
}
几天来我一直在努力解决这个问题,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
}