UIBezierPath在封闭区域内填充

问题描述

我试图了解我是否可以填写使用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)
    }
}

产生这种效果:

enter image description here

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

解决方法

像这样初始化空的UIBezierPath

let bp = UIBezierPath()

您将获得此输出

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...