我无法得到一个圆弧来填充 Swift 4
I can't get an arc to fill in Swift 4
我有一个 class 可以制作一个圆形的 UIView。当我将圆圈添加到我的视图时,它显示红色轮廓,但内部是清晰的而不是黑色。我希望它有黑色填充。
class CircleView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.clear
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
if let context = UIGraphicsGetCurrentContext() {
context.setLineWidth(1.0);
UIColor.red.set()
let center = CGPoint(x: frame.size.width/2, y: frame.size.height/2)
let radius = (frame.size.width - 10)/2
context.addArc(center: center, radius: radius, startAngle: 0.0, endAngle: .pi * 2.0, clockwise: true)
context.strokePath()
context.closePath()
context.setFillColor(UIColor.black.cgColor)
context.fillPath()
}
}
}
如果您查看 strokePath() 的文档:
The current path is cleared as a side effect of calling this function.
基本上,在抚摸完你的路径后,你的路径被重置,没有什么可填充的。
解决方法是先保存 context.path
,然后再使用 context.addPath(path)
。但是,我通常更喜欢先构建一个单独的CGMutablePath
,然后再将其添加到上下文中。
这更容易用 UIBezierPath
解决。
override func draw(_ rect: CGRect) {
let path = UIBezierPath(ovalIn: bounds)
path.lineWidth = 1
UIColor.red.setStroke()
UIColor.black.setFill()
path.fill()
path.stroke()
}
我有一个 class 可以制作一个圆形的 UIView。当我将圆圈添加到我的视图时,它显示红色轮廓,但内部是清晰的而不是黑色。我希望它有黑色填充。
class CircleView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.clear
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
if let context = UIGraphicsGetCurrentContext() {
context.setLineWidth(1.0);
UIColor.red.set()
let center = CGPoint(x: frame.size.width/2, y: frame.size.height/2)
let radius = (frame.size.width - 10)/2
context.addArc(center: center, radius: radius, startAngle: 0.0, endAngle: .pi * 2.0, clockwise: true)
context.strokePath()
context.closePath()
context.setFillColor(UIColor.black.cgColor)
context.fillPath()
}
}
}
如果您查看 strokePath() 的文档:
The current path is cleared as a side effect of calling this function.
基本上,在抚摸完你的路径后,你的路径被重置,没有什么可填充的。
解决方法是先保存 context.path
,然后再使用 context.addPath(path)
。但是,我通常更喜欢先构建一个单独的CGMutablePath
,然后再将其添加到上下文中。
这更容易用 UIBezierPath
解决。
override func draw(_ rect: CGRect) {
let path = UIBezierPath(ovalIn: bounds)
path.lineWidth = 1
UIColor.red.setStroke()
UIColor.black.setFill()
path.fill()
path.stroke()
}