Проблема, вероятно, заключается в следующей фразе:
arcCenter: CGPoint(x: center.x , y: center.y)
Центр представления - это то место, где вид находится в своем суперпредставлении.Это не то, что вы хотите.Вы хотите центр из вид.Попробуйте это:
arcCenter: CGPoint(x: bounds.midX , y: bounds.midY)
Однако было бы лучше, если бы вы дали слою фигуры рамку, размер и положение и сделали все с точки зрения слоя фигуры (который, в конце концов, где фигурарисуется).Например:
bgShapeLayer.frame = self.layer.bounds
self.layer.addSublayer(bgShapeLayer)
bgShapeLayer.path = UIBezierPath(
arcCenter: CGPoint(x: bgShapeLayer.bounds.midX, y: bgShapeLayer.bounds.midY),
radius: bgShapeLayer.bounds.width/2,
startAngle: -.pi/2, endAngle: 1.5*.pi, clockwise: true).cgPath
Таким образом, мы не путаем координаты вида и координаты слоя, как это делает ваш код.В какой-то степени вы можете избежать неприятностей с этим, потому что бывает, что в этой ситуации есть общая эквивалентность внутренних координат вида, внутренних координат его слоя и внутренних координат bgShapeLayer
, но такая путаница не является хорошей привычкойв.Вы должны сказать, что вы имеете в виду, а не полагаться на непредвиденные обстоятельства.