Я сделал следующее изменение по радиусу и центру, и результат кажется таким же близким к тому, что вы ищете (конечно, в зависимости от размера рамки, у вас есть немного места ниже); он также учитывает lineWidth, чтобы избежать рисования за рамкой.
override func viewDidAppear(_ animated: Bool) {
let trackLayer = CAShapeLayer()
let lineWidth = CGFloat(3)
let maxRadius = min(arcView.frame.size.height, arcView.frame.size.width/2) - lineWidth
let circularPath = UIBezierPath(
arcCenter: CGPoint(x: arcView.frame.size.width/2, y: maxRadius),
radius: maxRadius,
startAngle: CGFloat(180.0).toRadians(),
endAngle: CGFloat(0.0).toRadians(),
clockwise: true)
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor.red.cgColor
trackLayer.lineWidth = lineWidth
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.lineCap = kCALineCapButt
arcView.layer.sublayers?.removeAll()
arcView.layer.addSublayer(trackLayer)
}