[英]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.