Наклон одного края прямоугольника UIBezierPath - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь наклонить один край UIBezierPath в Свифте. Я полагаю, что вы делаете это, используя move на одном из краев. Аналогично приведенному ниже -

let offset: CGFloat = 60.0;

let path = UIBezierPath()

let width = self.bounds.width - offset

let upperLeftPoint = CGPoint(x: self.bounds.origin.x + width + offset, y: self.bounds.origin.y)
let upperRightPoint = CGPoint(x: self.bounds.origin.x, y: self.bounds.origin.y)

let lowerRightPoint = CGPoint(x: self.bounds.origin.x, y: self.bounds.size.height)
let lowerLeftPoint = CGPoint(x: width - offset, y: self.bounds.size.height)

path.move(to: upperLeftPoint)
path.addLine(to: upperRightPoint)
path.addLine(to: lowerRightPoint)
path.addLine(to: lowerLeftPoint)
path.addLine(to: upperLeftPoint)

// Close the path. This will create the last line automatically.
path.close()
UIColor.red.setFill()
path.fill()

let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
self.layer.mask = shapeLayer;

Однако это не совсем то, чего я пытаюсь достичь. Ниже то, что я пытаюсь достичь. desired image

1 Ответ

1 голос
/ 16 января 2020

Я получил эту форму, выполнив следующее -

class Header: UIView {
    var path: UIBezierPath!

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor.red
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    func createHeader() {
        // Drawing code
        // Get Height and Width
        let layerHeight = layer.frame.height
        let layerWidth = layer.frame.width
        // Create Path
        let bezierPath = UIBezierPath()
        //  Points
        let pointA = CGPoint(x: 0, y: 0)
        let pointB = CGPoint(x: layerWidth, y: 0)
        let pointC = CGPoint(x: layerWidth, y: layerHeight*2/3)
        let pointD = CGPoint(x: 0, y: layerHeight)
        // Draw the path
        bezierPath.move(to: pointA)
        bezierPath.addLine(to: pointB)
        bezierPath.addLine(to: pointC)
        bezierPath.addLine(to: pointD)
        bezierPath.close()
        // Mask to Path
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = bezierPath.cgPath
        layer.mask = shapeLayer
    }

    override func draw(_ rect: CGRect) {
        //    self.createRectangle()
        self.createHeader()
    }
}
...