Swift + Autolayout:旋转UILabel,将它放在UIView旁边

swa*_*ner 1 uiview ios swift

我想将UILabel附加到另一个UIView,目前使用AutoLayout进行布局.

我想要实现的目标如下:

在此输入图像描述

但是,如果我只旋转视图,它会围绕中心点旋转,如果我更改锚点,则上部视图会移动.如何首先使用autolayout布局两个视图然后进行旋转?

目前,autolayout执行以下操作:

在此输入图像描述

使用以下代码:

    label.layer.anchorPoint = CGPoint(x: 0, y: 0)
    label.layer.transform = CATransform3DMakeRotation(CGFloat(-45 / 180.0 * CGFloat(M_PI)), 0, 0, 1)
Run Code Online (Sandbox Code Playgroud)

我确实得到了类似的东西

在此输入图像描述

rob*_*off 14

不要更改锚点,因为这会搞乱autolayout.

相反,补偿锚点在变换中的位置:

class ViewController: UIViewController {

    @IBOutlet var label: UILabel!
    @IBOutlet var slider: UISlider!

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        updateTransform()
    }

    @IBAction func sliderValueChanged(_ sender: Any) {
        updateTransform()
    }

    private func updateTransform() {
        var transform = CGAffineTransform.identity
        let labelSize = label.bounds.size
        transform = transform.translatedBy(x: -labelSize.width / 2, y: labelSize.height / 2)
        transform = transform.rotated(by: -CGFloat(slider.value) * CGFloat.pi / 2)
        transform = transform.translatedBy(x: labelSize.width / 2, y: -labelSize.height / 2)
        label.transform = transform
    }

}
Run Code Online (Sandbox Code Playgroud)

结果:

旋转标签的演示