我想将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)
结果:
| 归档时间: |
|
| 查看次数: |
1682 次 |
| 最近记录: |