更改UIView中绘制路径的颜色draw(_rect)

时间:2019-05-13 20:09:00

标签: ios uiview core-graphics

我在addArc子类的UIView函数中使用draw(_ rect: CGrect)画了一个圆。最初它可以很好地绘制,但是当发生某些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,但是如果我只有{{1},我不确定如何应用填充颜色更改}。

我意识到还有其他可能更容易/更有效的方法来创建圆(例如,CGPath或具有拐角半径的UIBezierPath),但是我特别想更好地理解Core Graphics我想了解为什么这行不通。

1 个答案:

答案 0 :(得分:1)

RewriteCond %{QUERY_STRING} ^id=([^&]*)(.*)$ RewriteRule ^xxx/([0-9a-z\-]*)\.php$ /xxx/index\.php?id=%1%2 [L] RewriteRule ^xxx/([0-9a-z\-]*)\.php$ /xxx/index\.php?id=$1 [QSA,L] 中调用我的视图设置代码时,忘记了该方法可能被调用了多次(实际上是)。因此,正如Sulthan在上述评论中指出的那样,我确实有重叠的观点。在我要重绘的圆圈的上方还有第二个圆圈。

layoutSubviews内添加if语句,以防止其多次设置圆圈,这对我来说是固定的。

谢谢苏珊。