Ios 不显示图层路径
我目前正在制作一个圆形进度条,为此我创建了一个customView。但是,不会显示shapeLayer。我尝试在shapeLayer中添加一个框架以及背景色,但是它只显示了一个矩形,而不是我希望看到的圆形路径。任何关于我做错了什么的想法:思考:Ios 不显示图层路径,ios,swift,xcode,calayer,uibezierpath,Ios,Swift,Xcode,Calayer,Uibezierpath,我目前正在制作一个圆形进度条,为此我创建了一个customView。但是,不会显示shapeLayer。我尝试在shapeLayer中添加一个框架以及背景色,但是它只显示了一个矩形,而不是我希望看到的圆形路径。任何关于我做错了什么的想法:思考: import UIKit class CircularProgressBar: UIView { override func draw(_ rect: CGRect) { setupProgressView() }
import UIKit
class CircularProgressBar: UIView {
override func draw(_ rect: CGRect) {
setupProgressView()
}
private func setupProgressView() {
let shapeLayer = CAShapeLayer()
let circularPath = UIBezierPath(arcCenter: center,
radius: 100,
startAngle: 0,
endAngle: 2*CGFloat.pi,
clockwise: true)
shapeLayer.path = circularPath.cgPath
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.strokeColor = UIColor.yellow.cgColor
shapeLayer.lineWidth = 20
self.layer.addSublayer(shapeLayer)
}
}
定形层框架
shapeLayer.frame = bounds
更好的方法是不使用画法
import UIKit
@IBDesignable
class CircularProgressBar: UIView {
private lazy var shapeLayer: CAShapeLayer = {
let shape = CAShapeLayer()
shape.fillColor = UIColor.blue.cgColor
shape.strokeColor = UIColor.yellow.cgColor
shape.lineWidth = 20
return shape
}()
override init(frame: CGRect) {
super.init(frame: frame)
addLayers()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
addLayers()
}
private func addLayers() {
layer.addSublayer(shapeLayer)
}
override func layoutSubviews() {
updatePath()
}
private func updatePath() {
let circularPath = UIBezierPath(arcCenter: CGPoint(x: bounds.midX, y: bounds.midY),
radius: min(bounds.midX, bounds.midY) - shapeLayer.lineWidth/2,
startAngle: 0,
endAngle: 2*CGFloat.pi,
clockwise: true)
shapeLayer.frame = bounds
shapeLayer.path = circularPath.cgPath
}
}