核心图形剪辑

时间:2017-06-11 17:05:25

标签: ios swift core-graphics core quartz-2d

我试图了解IOS核心图形中的剪辑,但我无法弄清楚一些奇怪的行为。

我想要做的是剪掉一个小三角形。我从UIView做了一个子视图,我重写了draw(_ rect)函数。

使用此代码我绘制三角形:

    let con = UIGraphicsGetCurrentContext()!

    con.setFillColor(UIColor.red.cgColor)
    con.move(to: CGPoint(x: rect.midX - 10, y: rect.maxY - 10))
    con.addLine(to: CGPoint(x: rect.midX, y: rect.maxY - 20 ))
    con.addLine(to: CGPoint(x: rect.midX + 10, y: rect.maxY - 10 ))
    con.closePath()

之后我走了路径周围的矩形,我剪了三角形:

    con.addRect(con.boundingBoxOfPath)
    con.clip(using: .evenOdd)

现在,如果我尝试填充路径,则不会出现任何内容。 此外,如果我尝试将当前路径添加到整个子视图矩形并用红色填充它,我希望除了三角形之外整个区域都是红色的,但结果是:

enter image description here

我无法在其他任何地方画画!

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的代码中的错误是:con.addRect(con.boundingBoxOfPath)。矩形boundingBoxOfPath与该任务无关。如果要能够在视图中除三角形之外的任何位置绘制,则需要将整个视图矩形添加到剪切路径。换句话说,将该行更改为:con.addRect(rect)

以下代码对我有用:

guard let ctx = UIGraphicsGetCurrentContext() else { return }

ctx.beginPath()
ctx.move(to: CGPoint(x: rect.midX - 10, y: rect.midY - 10))
ctx.addLine(to: CGPoint(x: rect.midX, y: rect.midY - 20 ))
ctx.addLine(to: CGPoint(x: rect.midX + 10, y: rect.midY - 10 ))
ctx.closePath()

ctx.addRect(rect)
ctx.clip(using: .evenOdd)

// Test filling the view (except triangle) with red:
ctx.setFillColor(UIColor.red.cgColor)
ctx.fill(rect)