我有两个贝塞尔曲线路径,我想把它们组合起来形成一个并集,这样我就可以画出整个外形。在我的例子中,它是一个带尾巴的演讲气泡,所以尽管它不是一个复杂的形状,但实际上很难用一个单独的路径来创建它。似乎没有一个核心图形API来创建工会,我错了吗?如果我没有,有谁知道有一个图书馆可以处理这个问题吗?我已经搜索了GitHub,但没有结果。
ssm49v7z1#
UIBezierPath在处理闭合图形时执行此操作。
UIBezierPath *firstPath = [UIBezierPath bezierPath]; // build your path UIBezierPath *secondPath = [UIBezierPath bezierPath]; // build your path [firstPath appendPath:secondPath];
pbgvytdp2#
如果您的部署目标是iOS 16(或macOS 13)或更高版本,您可以使用union方法计算两个CGPath对象的并集,如下所示:
union
CGPath
let path1: CGPath = ... let path2: CGPath = ... let combo = path1.union(path2)
eoigrqb63#
在Swift 3中,Bezier路径可以通过以下方式统一:
override func draw(_ rect: CGRect) { super.draw(rect) UIColor.black.setStroke() UIColor.red.setFill() let currentContext = UIGraphicsGetCurrentContext() currentContext?.saveGState() let path = drawTopView() path.lineWidth = 5.0 path.fill() path.stroke() let middlepath = drawMiddleView() middlepath.lineWidth = 2.0 middlepath.fill() middlepath.stroke() path.append(middlepath) currentContext?.restoreGState() }
hfyxw5xn4#
func createView() -> some View { let a = Path { path in path.move(to: CGPoint(x: 0, y: 0)) path.addLine(to: CGPoint(x: 50, y: 100)) path.addLine(to: CGPoint(x: 100, y: 0)) } .stroke(Color.white, style: StrokeStyle(lineWidth: 5, lineCap: .round, lineJoin: .round)) let b = RoundedRectangle(cornerRadius: 5, style: .continuous) .fill(Color.white) .frame(width: 30, height: 30) .position(CGPoint.zero) return ZStack { a b } .compositingGroup() .colorMultiply(Color.red) }
4条答案
按热度按时间ssm49v7z1#
UIBezierPath在处理闭合图形时执行此操作。
pbgvytdp2#
如果您的部署目标是iOS 16(或macOS 13)或更高版本,您可以使用
union
方法计算两个CGPath
对象的并集,如下所示:eoigrqb63#
在Swift 3中,Bezier路径可以通过以下方式统一:
hfyxw5xn4#
快速用户界面