Как повернуть ярлык iOS и сделать его приклеенным к краю экрана? - PullRequest
0 голосов
/ 10 мая 2018

Например, у меня есть следующая структура:

Start

Я хочу повернуть ярлык на 270 градусов, чтобы добиться этого:

End

через CGAffineTransform.rotated следующим образом:

    credentialsView.text = "Developed in EVNE Developers"
    credentialsView.transform = credentialsView.transform.rotated(by: CGFloat(Double.pi / 2 * 3))

но вместо ожидаемого результата я получил следующее:

enter image description here

Итак, как правильно повернуть вид, не изменяя его границы на квадрат или что-то еще, и удерживая 16px от края экрана?

Я пробовал много способов, в том числе расширение UILabel, чтобы видеть вращение непосредственно в раскадровке, помещать представление данных в просмотр стека с ведением, и это также не помогает, и т. Д.

1 Ответ

0 голосов
/ 10 мая 2018

Вот решение, которое будет вращать вашу этикетку соответствующим образом вперед и обратно в вертикально-горизонтальное состояние. Перед запуском кода установите ограничения для вашей метки в раскадровке: ведите к 16 и по центру.

Теперь проверьте это:

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    // Your leading constraint from storyboard, initially set to 16
    @IBOutlet weak var leadingConstraint: NSLayoutConstraint!

    var isHorizontal: Bool = true
    var defaultLeftInset: CGFloat = 16.0

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = .white
        label.text = "This is my label"
        self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapAction)))
    }

    @objc func tapAction() {
        if self.isHorizontal {
            // Here goes some magic
            // constraints do not depend on transform matrix, 
            // so we have to adjust a leading one to fit our requirements
            leadingConstraint.constant = defaultLeftInset - label.frame.width/2 + label.frame.height/2
            self.label.transform = CGAffineTransform(rotationAngle: .pi/2*3)
        }
        else {
            leadingConstraint.constant = defaultLeftInset
            self.label.transform = .identity
        }
        self.isHorizontal = !self.isHorizontal
    }
}
...