更改在 UIView draw(_rect) 中绘制的路径的颜色
Changing colour of path drawn in UIView draw(_rect)
我在 UIView
子类的 draw(_ rect: CGrect)
函数中使用 addArc
画了一个圆。它最初绘制得很好,但是当某些 UI 触发器发生时,我想通过更改 isFilledIn
属性 的值来更改圆的填充颜色。
但是,isFilledIn
属性修改后,我的圈子并没有改变。 isFilledIn
属性 和 draw
方法都按预期被调用,但圆圈的外观没有改变。好像画完圆圈,样子就卡住了。
var isFilledIn = false {
didSet {
setNeedsDisplay()
}
}
override func draw(_ rect: CGRect) {
if let context = UIGraphicsGetCurrentContext() {
context.setLineWidth(outlineWidth)
myOutlineColor.setStroke()
if isFilledIn {
myFilledColor.setFill()
} else {
myEmptyColor.setFill()
}
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.drawPath(using: .fillStroke)
}
}
我尝试添加 context.clear(rect)
但没有效果。我还考虑过将 CGPath
保存到 属性 并尝试修改它而不是调用 setNeedsDisplay
但我不确定如果我只有一个,如何应用填充颜色更改CGPath
.
我意识到还有其他可能更容易/更有效的方法来创建圆圈(例如 UIBezierPath
,或带有圆角半径的 UIView
),但我特别想了解 Core图形更好,我想了解为什么这不起作用。
在 layoutSubviews
中调用我的视图设置代码,忘记了该方法可能会被调用多次(确实如此)。因此,正如 Sulthan 在上面的评论中指出的那样,我确实有重叠的观点。在我试图重画的圆圈之上有第二个圆圈。
在 layoutSubviews
中添加一个 if
语句以防止它多次设置圆圈为我修复了它。
谢谢苏丹。
我在 UIView
子类的 draw(_ rect: CGrect)
函数中使用 addArc
画了一个圆。它最初绘制得很好,但是当某些 UI 触发器发生时,我想通过更改 isFilledIn
属性 的值来更改圆的填充颜色。
但是,isFilledIn
属性修改后,我的圈子并没有改变。 isFilledIn
属性 和 draw
方法都按预期被调用,但圆圈的外观没有改变。好像画完圆圈,样子就卡住了。
var isFilledIn = false {
didSet {
setNeedsDisplay()
}
}
override func draw(_ rect: CGRect) {
if let context = UIGraphicsGetCurrentContext() {
context.setLineWidth(outlineWidth)
myOutlineColor.setStroke()
if isFilledIn {
myFilledColor.setFill()
} else {
myEmptyColor.setFill()
}
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.drawPath(using: .fillStroke)
}
}
我尝试添加 context.clear(rect)
但没有效果。我还考虑过将 CGPath
保存到 属性 并尝试修改它而不是调用 setNeedsDisplay
但我不确定如果我只有一个,如何应用填充颜色更改CGPath
.
我意识到还有其他可能更容易/更有效的方法来创建圆圈(例如 UIBezierPath
,或带有圆角半径的 UIView
),但我特别想了解 Core图形更好,我想了解为什么这不起作用。
在 layoutSubviews
中调用我的视图设置代码,忘记了该方法可能会被调用多次(确实如此)。因此,正如 Sulthan 在上面的评论中指出的那样,我确实有重叠的观点。在我试图重画的圆圈之上有第二个圆圈。
在 layoutSubviews
中添加一个 if
语句以防止它多次设置圆圈为我修复了它。
谢谢苏丹。