CGContext 'addPath' 到现有绘图
CGContext 'addPath' to the existing drawing
我在自定义 UIView 中绘制了一个 CGPath,如下所示。有一个刷新按钮应该向已绘制的路径添加新行。
private func refresh() {
self.setNeedsDisplay()
}
override func draw(_ rect: CGRect){
guard let context = UIGraphicsGetCurrentContext() else {
return
}
context.setLineWidth(1)
context.addPath(self.newPathPart())
context.setStrokeColor(UIColor.white.cgColor)
context.interpolationQuality = .none
context.setAllowsAntialiasing(false)
context.setShouldAntialias(false)
context.strokePath()
}
private func newPathPart() -> CGPath {
let lineWidth: CGFloat = 1
let mPath = CGMutablePath()
if lastPoint == nil {
lastPoint = CGPoint(x: self.bounds.midX - lineWidth/2, y: self.bounds.midY - lineWidth/2)
}
mPath.move(to: lastPoint!)
mPath.addLine(to: CGPoint(x: lastPoint!.x + 15, y: lastPoint!.y + 15))
lastPoint = CGPoint(x: lastPoint!.x + 15, y: lastPoint!.y + 15)
mPath.closeSubpath()
return mPath
}
我的印象是 newPartPath() 将附加到绘制的现有路径,但事实似乎并非如此。我希望优化代码,这样我就不会在每次刷新时完全重绘整个路径,而只是添加的路径。如何实现?
您需要随时准备一个 CGMutablePath 或 CGPath 的集合,以便您可以在实际的 CGPath 中不断积累新的路径部分。
调用draw
时,有一个rect
。您忽略了该参数。不要忽视它。您只需提供 rect
中的绘图部分。因此,检查 rect
并以这样一种方式进行绘制,以补充其中缺少的绘图部分。换句话说,您只绘制与 rect
.
相交的路径部分
请注意,如果 您 是负责知道有新的路径部分等待绘制的人,您可以调用 setNeedsDisplay(in:)
rect
的那部分路径,所以这就是 draw
.
中要求的 rect
我在自定义 UIView 中绘制了一个 CGPath,如下所示。有一个刷新按钮应该向已绘制的路径添加新行。
private func refresh() {
self.setNeedsDisplay()
}
override func draw(_ rect: CGRect){
guard let context = UIGraphicsGetCurrentContext() else {
return
}
context.setLineWidth(1)
context.addPath(self.newPathPart())
context.setStrokeColor(UIColor.white.cgColor)
context.interpolationQuality = .none
context.setAllowsAntialiasing(false)
context.setShouldAntialias(false)
context.strokePath()
}
private func newPathPart() -> CGPath {
let lineWidth: CGFloat = 1
let mPath = CGMutablePath()
if lastPoint == nil {
lastPoint = CGPoint(x: self.bounds.midX - lineWidth/2, y: self.bounds.midY - lineWidth/2)
}
mPath.move(to: lastPoint!)
mPath.addLine(to: CGPoint(x: lastPoint!.x + 15, y: lastPoint!.y + 15))
lastPoint = CGPoint(x: lastPoint!.x + 15, y: lastPoint!.y + 15)
mPath.closeSubpath()
return mPath
}
我的印象是 newPartPath() 将附加到绘制的现有路径,但事实似乎并非如此。我希望优化代码,这样我就不会在每次刷新时完全重绘整个路径,而只是添加的路径。如何实现?
您需要随时准备一个 CGMutablePath 或 CGPath 的集合,以便您可以在实际的 CGPath 中不断积累新的路径部分。
调用draw
时,有一个rect
。您忽略了该参数。不要忽视它。您只需提供 rect
中的绘图部分。因此,检查 rect
并以这样一种方式进行绘制,以补充其中缺少的绘图部分。换句话说,您只绘制与 rect
.
请注意,如果 您 是负责知道有新的路径部分等待绘制的人,您可以调用 setNeedsDisplay(in:)
rect
的那部分路径,所以这就是 draw
.
rect