【问题标题】:UIBezierPath fill inside closed areaUIBezierPath 填充封闭区域内
【发布时间】:2020-08-11 17:48:59
【问题描述】:

我正在尝试了解是否可以填写使用UIBezierPath 绘制的封闭区域。

这是我用来在UIButton 内绘制不规则形状的代码:

import UIKit

@IBDesignable class DrawingBox : UIButton {
    
    let strokeColor : UIColor = .systemBlue
    let fillColor : UIColor = .purple
    let clearColor : UIColor = .clear
    
    override func draw(_ rect: CGRect) {
        clipsToBounds = true
        
        strokeColor.setStroke()
        fillColor.setFill()
        
        let bp = UIBezierPath(rect: rect)
        bp.lineWidth = 6.0
        
        bp.move(to: p(50, 50))
        
        bp.addLine(to: p(100, 20))
        bp.addLine(to: p(200, 50))
        bp.addLine(to: p(300, 70))
        bp.addLine(to: p(240, 150))
        bp.addLine(to: p(140, 100))
        bp.close()
        bp.stroke()
                
        bp.fill(with: CGBlendMode.colorDodge, alpha: 1.0)
    }
    
    private func p(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
        return CGPoint(x: x, y: y)
    }
}

产生这种效果:

这几乎就是我想要的;我希望填充只发生在我绘制的形状内。我注意到,如果我只说bp.fill(),整个视图都会被紫色填满。感谢所有的指点,谢谢。

【问题讨论】:

    标签: swift uibezierpath fill


    【解决方案1】:

    像这样启动空的 UIBezierPath

    let bp = UIBezierPath()
    

    你会得到这个输出

    【讨论】:

    • 好收获。起初我错过了。 (已投票。)原因是调用UIBezierPath(rect: rect) 创建了一个贝塞尔路径,其中包含一个与rect 相同大小的矩形。您会注意到 OP 屏幕截图有一个描边轮廓。通过使用 `UIBezierPath()` 代替你从一个空的 Bezier 路径开始,然后只添加你想要绘制的部分。
    • UIBezierPath(rect: rect) 如果你这样做...调用填充颜色...整个矩形将被填充...
    • 因为整个 rect 是 bezierpath 的一部分,您能详细说明您需要什么吗?
    • 谢谢@jawadAli - 我稍后会测试它,如果它有效,我会接受你的回答。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2014-02-25
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多