UIBezierPath 在封闭区域内填充
UIBezierPath fill inside closed area
我想知道我是否可以填充我使用 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()
整个视图就会充满紫色。感谢所有指点,谢谢。
像这样启动空的 UIBezierPath
let bp = 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)
}
}
产生这种效果的:
这几乎就是我想要的;我希望填充仅发生在我绘制的形状内。我注意到如果我只说 bp.fill()
整个视图就会充满紫色。感谢所有指点,谢谢。
像这样启动空的 UIBezierPath
let bp = UIBezierPath()
你会得到这个输出