Как правильно повернуть CATextLayer в Swift? - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я сталкиваюсь с проблемой, заключающейся в том, что при вращении CATextLayer размер кадра будет неожиданно изменяться одновременно. Я ожидаю, что текст можно повернуть на некоторый угол без изменения размера рамки . Если кто-нибудь может рассказать мне об этом, спасибо заранее.

Что я пробовал:

var someAngle: CGFloat = 0 {
    didSet {
        drawText()
    }
}

func drawText() {

    for layer in someView.layer.sublayers ?? [] where layer is CATextLayer {
        layer.removeFromSuperlayer()
    }

    let textLayer = CATextLayer()
    textLayer.fontSize = 26
    textLayer.backgroundColor = UIColor.lightGray.cgColor
    textLayer.string = "Hello world"
    textLayer.alignmentMode = .center

    textLayer.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    textLayer.transform = CATransform3DMakeRotation(someAngle, 0.0, 0.0, 1.0)

    let textSize = calculateTextSize(text: "Hello world", font: UIFont.systemFont(ofSize: 26))
    let origin = CGPoint(x: someView.bounds.midX - textSize.width/2, y: someView.bounds.midY - textSize.height/2)
    textLayer.frame = CGRect(origin: origin, size: textSize)

    someView.layer.addSublayer(textLayer)
}

Однако результат выглядит так:

enter image description here

И мои ожидания примерно такие: enter image description here

1 Ответ

0 голосов
/ 04 ноября 2019

решил эту проблему, добавив свойство textLayer вне функции.

var textLayer = CATextLayer()
...