Проблема с CAShapeLayer (ручная прорисовка)


#1

Добрый вечер, я кодом рисую CAShapeLAyer, на View, у View установлены constrainsts в storyBoard, Проблема вот в чём: в последней строчке я рисую линию до нижней границы BackView(серая), но она почему то рисуется не до неё, может кто знает в чём проблема?

Как я понял, здесь ещё не известны размеры этого backview, Тогда в каком методе они будут известны?


let path = UIBezierPath()
path.move(to: CGPoint(x: 40, y: 20))
path.addLine(to: CGPoint(x: view.bounds.width - 40, y: 20))
path.addQuadCurve(to: CGPoint(x: view.bounds.width - 20, y: 40), controlPoint: CGPoint(x: view.bounds.width - 20, y: 20))
path.addLine(to: CGPoint(x: view.bounds.width - 20, y: backView.bounds.height / 4))
path.addArc(withCenter: CGPoint(x: view.bounds.width - 40, y: backView.bounds.height / 4) , radius: 20, startAngle: 0, endAngle: .pi / 4, clockwise: true)
path.addLine(to: CGPoint(x: 40, y: backView.bounds.height ))

    topLayer.path = path.cgPath
    backView.layer.addSublayer(topLayer)

#2

можете использовать viewDidAppear, либо didLayoutSubviews.
только учтите, что вам придется делать проверку, что бы не рисовать несколько раз в этих меиодах, т.к. они будут вызываться несколько раз.