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