如何在 Swift 中旋转 UIButton 和 UILabel 的文本?

如何旋转文字 UIButtonUILabel? 90度,180度。

注意: 在你将这个标记为重复之前,我有意将我的问题建模为这个问题的 Swift 版本: 如何在 Objective-C 中旋转 UIButton 和 UILabel 的文本?

66991 次浏览

我把我的答案在一个类似的格式 这个答案

这是原始标签:

enter image description here

顺时针旋转90度:

yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)

enter image description here

旋转180度:

yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi)

enter image description here

逆时针方向旋转90度:

yourLabelName.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2)

enter image description here

做同样的事情来旋转按钮。谢天谢地,触摸事件也可以旋转,所以按钮仍然可以在其新的界限中单击,而不需要做任何额外的事情。

yourButtonName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)

备注:

CGAffineTransform文档

基本格式是 CGAffineTransform(rotationAngle: CGFloat),其中 rotationAngle是弧度,而不是度数。

一个完整的圆周(360度)有2π 弧度。 Swift 包括有用的常数 CGFloat.pi

  • CGFloat.pi = π = 180度
  • CGFloat.pi / 2 = π/2 = 90度

自动布局:

自动布局不适用于旋转视图。(有关原因,请参阅 帧与界。)这个问题可以通过创建自定义视图来解决。这个答案展示了如何为 UITextView做这件事,但它与标签或按钮的基本概念是相同的。(请注意,您必须删除该答案中的 CGAffineTransformScale行,因为您不需要镜像文本。)

相关资料

迅速

顺时针旋转90度:

    var rotateLabel: UILabel = UILabel(frame: CGRectMake(100, 0, 28, 159))
    

rotateLabel.textAlignment = .Right
    

rotateLabel.text = "Hello!"
    

self.view.addSubview(rotateLabel)
    

rotateLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
    

rotateLabel.frame = CGRectMake(100, 0, 28, 159)

逆时针方向旋转90度:

    var rotateLabel: UILabel = UILabel(frame: CGRectMake(100, 0, 28, 159))
    

rotateLabel.textAlignment = .Right
    

rotateLabel.text = "Hello!"
    

self.view.addSubview(rotateLabel)
    

rotateLabel.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
    

rotateLabel.frame = CGRectMake(100, 0, 28, 159)

改编自 Ananthu R Krishnan 的答案,以适应 Swift 3.1。

逆时针方向旋转90度:

let rotateLabel: UILabel = UILabel(frame: CGRect(x:15, y:66, width:28, height:159))
rotateLabel.textAlignment = .right
rotateLabel.text = "TEXT"
self.view.addSubview(rotateLabel)
rotateLabel.transform = CGAffineTransform(rotationAngle: CGFloat(-(Double.pi / 2.0)))
rotateLabel.frame = CGRect(x:15, y:66, width:28, height:159)

如果你经常这么做,你就不会想要延期了。此外,这将允许您旋转您的视图0-360度。

extension UIView {
func rotate(degrees: CGFloat) {
rotate(radians: CGFloat.pi * degrees / 180.0)
}


func rotate(radians: CGFloat) {
self.transform = CGAffineTransform(rotationAngle: radians)
}
}

然后您可以简单地调用您的视图的旋转

myView.rotate(degrees: 90)

我建议使用带有度和逆时针/顺时针选项的扩展

func rotate(degrees: Int , clockwise: Bool)
{
let x  = 180 / degrees
if (clockwise)
{
self.transform = CGAffineTransform(rotationAngle: CGFloat.pi / CGFloat(x))
}
else
{
self.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / CGFloat(x))
}
}

我用它作为 extension UILabel {},但这显然取决于你

如果你使用自定义字体,你可能需要:

rotateLabel.sizeToFit()