Вы сейчас рисуете «а». Вы хотите нарисовать «б».
extension UIBezierPath {
convenience init(rightAngledTriangleInRect: CGRect, offset withOffset: CGFloat) {
self.init()
move(to: CGPoint(x: rect.minX, y: rect.minY))
addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
addLine(to: CGPoint(x: rect.minX + offset, y: rect.maxY))
addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
addLine(to: CGPoint(x: rect.minX, y: rect.minY))
close()
}
}
Тогда используйте по:
let path = UIBezierPath.init(rightAngledTriangleInRect: rect, withOffset: 20.0)
Обратите внимание, что нет необходимости добавлять self.
в удобные единицы для инструкций пути Безье.
Если вы много рисуете, я бы порекомендовал добавить несколько таких элементов, чтобы облегчить жизнь.
Для использования в вашем текущем TriangleView:
class TriangleView: UIView {
override func draw(_ rect: CGRect) {
let path = UIBezierPath.init(rightAngledTriangleInRect: rect, withOffset: 20.0)
let shape = CAShapeLayer()
shape.path = path.cgPath
// Set the mask
layer.mask = shape
}
}