【问题标题】:Swift + Autolayout: Rotate UILabel, keep it next to UIViewSwift + Autolayout:旋转 UILabel,保持在 UIView 旁边
【发布时间】:2016-12-09 15:01:03
【问题描述】:

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

我想要达到的目标如下:

但是如果我只旋转视图,它会围绕中心点旋转,如果我改变锚点,上面的视图会移动。我如何必须先使用自动布局来布局两个视图,然后再进行旋转?

目前,自动布局执行以下操作:

使用以下代码:

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

我确实得到了类似的东西

【问题讨论】:

标签: ios swift uiview


【解决方案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
    }

}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多