【发布时间】:2019-09-30 19:42:12
【问题描述】:
我在我的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),但我特别想更好地理解核心图形,我想了解为什么这不起作用。
【问题讨论】:
-
在我看来这不可能发生。也许你在你的观点之上有另一个观点?你确定这两种颜色真的不一样?在我看来,错误将在其他地方。
-
颜色肯定是不同的,但我做了一个快速检查,实际上我在我的超级视图中看到的观看次数比我预期的要多……调查一下,大概就是这个问题,先发制人的谢谢以防万一。
-
啊,我在
layoutSubviews中调用了视图设置代码,并且被调用了两次。非常基本的错误。
标签: ios uiview core-graphics