我使用UIBezierPath和CAShapeLayer使用以下代码创建了圆形进度视图。
.result
如果我将该代码放在我的viewDidLoad中,它可以正常工作。但是,当我从storyboard添加UIView并将其类设置为自定义类时,然后将所有代码复制到该自定义UIView类并在awakeFromNib函数中调用它无法正常工作的原因是什么?我如何使用上面的代码与自定义UIView类?
橙色视图应该是我的自定义视图我添加了前导,尾随,底部和固定高度约束它但它看起来像上面。圆圈视图是否需要放置橙色视图的中心?
答案 0 :(得分:0)
实际上它有效,但它的位置错误。这种情况下的位置超出了您的视野,因此您无法看到它。它会让你认为你的代码不起作用。
如果您想在视图的中心放置圆圈。将代码放在awakeFromNib
中并计算自己的中心,不要使用self.center
override func awakeFromNib() {
let center = CGPoint.init(x: frame.width / 2, y: frame.height / 2)
let trackLayer = CAShapeLayer()
let shapeLayer = 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)
}
结果