繁体   English   中英

Swift + Autolayout:旋转UILabel,将其保留在UIView旁边

[英]Swift + Autolayout: Rotate UILabel, keep it next to UIView

我想将一个UILabel附加到当前用AutoLayout布局的另一个UIView上。

我想实现以下目标:

在此处输入图片说明

但是,如果仅旋转视图,则围绕中心点旋转,如果更改锚点,则上部视图也会移动。 我该如何先用自动布局对两个视图进行布局,然后进行旋转?

目前,自动版式可以执行以下操作:

在此处输入图片说明

使用以下代码:

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

我得到类似的东西

在此处输入图片说明

不要更改锚点,因为那样会弄乱自动布局。

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

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
    }

}

结果:

旋转标签的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM