ios 创建2个贝塞尔曲线路径的并集

cld4siwp  于 2023-02-14  发布在  iOS
关注(0)|答案(4)|浏览(196)
    • bounty将在6天后过期**。回答此问题可获得+100声望奖励。Fattie希望引起更多人关注此问题。

我有两个贝塞尔曲线路径,我想把它们组合起来形成一个并集,这样我就可以画出整个外形。在我的例子中,它是一个带尾巴的演讲气泡,所以尽管它不是一个复杂的形状,但实际上很难用一个单独的路径来创建它。
似乎没有一个核心图形API来创建工会,我错了吗?
如果我没有,有谁知道有一个图书馆可以处理这个问题吗?我已经搜索了GitHub,但没有结果。

ssm49v7z

ssm49v7z1#

UIBezierPath在处理闭合图形时执行此操作。

UIBezierPath *firstPath = [UIBezierPath bezierPath];
// build your path

UIBezierPath *secondPath = [UIBezierPath bezierPath];
// build your path

[firstPath appendPath:secondPath];
pbgvytdp

pbgvytdp2#

如果您的部署目标是iOS 16(或macOS 13)或更高版本,您可以使用union方法计算两个CGPath对象的并集,如下所示:

let path1: CGPath = ...
let path2: CGPath = ...
let combo = path1.union(path2)
eoigrqb6

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()
}
hfyxw5xn

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)
}

相关问题