Как разместить CAShapeLayer в UIView - PullRequest
0 голосов
/ 27 января 2020

Я видел много ответов о переполнении стека, но ни один не помог мне. Я создал DrawView, где можно рисовать. Я создал экземпляр UIBezierPath для рисования. Я хочу перенести свой рисунок на маленький вид (красный на изображение). Вот что я сделал:

// This function is called when the user has finished to draw.

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    let shapeLayer = CAShapeLayer()

    //The CAShapeLayer has the same path of the drawing (currentPath is the instance of UIBezierPath).
    shapeLayer.path = currentPath?.cgPath
    shapeLayer.strokeColor = UIColor.black.cgColor
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.lineWidth = 10.0

    //drawingView is the red view where I want to see my drawing in the center. This line of code doesn't work like I expect because the drawing doesn't appear in the center of the view.
    shapeLayer.position = CGPoint(x: drawingView.frame.midX, y: drawingView.frame.midY)

    //I add the shapeLayer to the drawingView.
    drawingView.layer.addSublayer(shapeLayer)
}

Вот изображение приложения:

enter image description here

Есть подсказка? Спасибо.

1 Ответ

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

Проблема в следующей строке:

shapeLayer.position = CGPoint(x: drawingView.frame.midX, y: drawingView.frame.midY)

Везде, где вы говорите drawingView.frame, говорите drawingView.bounds.

(На самом деле вы должны говорить drawingView.layer.bounds, а не просто drawingView.bounds, но бывает, что это одно и то же.)

Однако есть и вторая проблема, заключающаяся в том, что у вашего слоя фигуры нет размера. Поэтому его position совпадает с его верхним левым углом. По этой причине вам было бы намного лучше отцентрировать его в суперслое, просто сказав

shapeLayer.frame = drawingView.layer.bounds

. Тогда у вас будет слой формы, точно занимающий чертежный вид. (Вы сможете увидеть это ясно, если вы дадите слою формы цвет фона.) Теперь ваша проблема заключается в том, что вы хотите убедиться, что сам путь рисования центрирован в слое формы, но это это другое упражнение.

...