Я создал представление хода выполнения круга, используя UIBezierPath и CAShapeLayer со следующим кодом.
let center = self.center
let trackLayer = CAShapeLayer()
let circularPath = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor.lightGray.cgColor
trackLayer.lineWidth = 10
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.lineCap = kCALineCapRound
self.layer.addSublayer(trackLayer)
shapeLayer.path = circularPath.cgPath
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 10
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineCap = kCALineCapRound
shapeLayer.strokeEnd = 0
self.layer.addSublayer(shapeLayer)
self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
Если я добавлю этот код в viewDidLoad, он будет работать нормально. Однако, когда я добавляю UIView из раскадровки и устанавливаю его класс в пользовательский класс, затем копирую все коды в этот пользовательский класс UIView и вызываю его в функции awakeFromNib, это не работает, в чем может быть причина? И как я могу использовать приведенный выше код с пользовательским классом UIView?
![](https://i.stack.imgur.com/GiJ3R.png)
Оранжевый вид должен быть моим пользовательским видом. Я добавил лидирующие, конечные, нижние и фиксированные ограничения по высоте, но он выглядит как выше. Разве круговой вид не должен располагаться в центре оранжевого вида?