在我的生命中,我无法将这条贝塞尔路径(下面显示的圆圈)居中。橙色视图被适当地约束并水平对齐,但是当我使用下面的方法向橙色视图添加3层时,我似乎无法将其居中到橙色视图。我将橙色视图声明为spinnerHolder
。
private func createCircleShapeLayer(strokeColor: UIColor, fillColor: UIColor) -> CAShapeLayer {
let layer = CAShapeLayer()
//The farther from 0 x is for this, the more separated the movements of the 3 paths.
let circularPath = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0),
radius: 30,
startAngle: 0,
endAngle: 2 * CGFloat.pi,
clockwise: true)
layer.path = circularPath.cgPath
layer.strokeColor = strokeColor.cgColor
layer.lineWidth = 3
layer.fillColor = fillColor.cgColor
layer.lineCap = kCALineCapRound
layer.position = spinnerHolder.center
return layer
}
最佳答案
1-将arcCenter
更改为
let circularPath = UIBezierPath(arcCenter: CGPoint(x:spinnerHolder.frame.width/2, y:spinnerHolder.frame.height/2),
radius: 30,
startAngle: 0,
endAngle: 2 * CGFloat.pi,
clockwise: true)
2-评论这个
layer.position = spinnerHolder.center
3-调用内部的方法
viewDidLayoutSubviews
var once = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if once {
spinnerHolder.addSublayer(createCircleShapeLayer(,,,,,))
once = false
}
}
调用内部
viewDidLayoutSubviews
不是必需的,在任何时间/任何地方添加它,但不要在VC加载之前添加4-检查这个Centering CAShapeLayer within UIView Swift