Я нарисовал круг, используя addArc
в моей функции UIView
subclass 'draw(_ rect: CGrect)
.Первоначально он прекрасно рисует, но когда происходит какой-то триггер пользовательского интерфейса, я хотел изменить цвет заливки круга, изменив значение свойства 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 Graphics и хочу понятьпочему это не работает.