Существует множество способов создания фигур с использованием UIBezierPaths. В этом посте обсуждается использование функции draw
для создания фигуры.
Вот пример использования функции clip
внутри ячейки.
func clip(imageView: UIView, withOffset offset: CGFloat) {
let path = UIBezierPath()
//Move to Top Left
path.move(to: .init(x: imageView.bounds.size.width * offset, y: 0))
//Draw line from Top Left to Top Right
path.addLine(to: .init(x: imageView.bounds.size.width, y: 0))
//Draw Line from Top Right to Bottom Right
path.addLine(to: .init(x: imageView.bounds.size.width * (1 - offset), y: imageView.bounds.size.height))
//Draw Line from Bottom Right to Bottom Left
path.addLine(to: .init(x: 0, y: imageView.bounds.size.height))
//Close Path
path.close()
//Create the Shape Mask for the ImageView
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.fillColor = UIColor.black.cgColor
imageView.layer.mask = shapeLayer
}
В этой функции смещение - это величина угла, который вы хотели бы видеть на фигуре, в диапазоне от 0 до 1. (0,4), кажется, работает для ваших требований.
Это имеет много общего с Apseri's. Ответ, кроме того, что я выбрал маршрут процентов, а не точный размер. Ничего плохого ни в одном из подходов, мне просто было легче понять с процентами. :)
Последнее замечание: я использовал эту функцию в функции layoutSubviews
.
override func layoutSubviews() {
super.layoutSubviews()
imageView.layoutIfNeeded()
clip(imageView: self.imageView, withOffset: 0.4)
}
Это выдает следующее изображение:
Надеюсь, это поможет.