UIBezierPath addClip и drawRect

Я знаю, что есть способ нарисовать roundedRect -UIBezierPath(roundedRect, cornerRadius)

но я хотел бы знать, если я клип угол самостоятельно, почему я должен addClip, прежде чем рисовать прямоугольник? (Я чувствую, что обрезать прямоугольник после того, как он был нарисован, более разумно. Чего я пропустил?)

(1) работа

override func drawRect(rect: CGRect) {
    var clipPath = UIBezierPath(roundedRect: rect, cornerRadius: 8.0)
    path.addClip()

    var rectPath = UIBezierPath(rect: rect)
    UIColor.redColor().setFill()
    rectPath.fill()
}

(2) не работает

override func drawRect(rect: CGRect) {
    var rectPath = UIBezierPath(rect: rect)
    UIColor.redColor().setFill()
    rectPath.fill()

    var clipPath = UIBezierPath(roundedRect: rect, cornerRadius: 8.0)
    path.addClip()
}

1 ответов


Если вы представляете область рисования в виде листа бумаги, отсечение не означает, что вы отрезали что-то от него ножницами после рисования. Вместо этого это больше похоже на размещение трафаретной доски на листе, и только пробитые области имеют значение для рисования.

эта концепция дает вам больше гибкости, потому что вы можете удалить или обменять доску трафарета в любое время, т. е. установить новый путь отсечения, который может быть очень полезен для более сложных рисунки.