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


Answers:


197

我将答案的格式与此答案相似。

这是原始标签:

在此处输入图片说明

顺时针旋转90度:

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

在此处输入图片说明

旋转180度:

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

在此处输入图片说明

逆时针旋转90度:

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

在此处输入图片说明

做同样的事情来旋转按钮。幸运的是,触摸事件也会旋转,因此按钮在新的范围内仍然可以单击,而无需执行任何其他操作。

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由于不需要镜像文本,因此您必须删除该答案中的行。)

有关


1
我对imageview进行了同样的操作。但是我的图像缩放了(小或大)。如何处理imageview ..?
Madhumitha

13

如果您经常这样做,则将无法进行扩展。同样,这将允许您将视图旋转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)

7

迅速

顺时针旋转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)

您必须再次分配框架?
Maksim Kniazev,

2

我建议使用带有度数和逆/顺时针方向的扩展

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 {}但这显然取决于您


1

改编了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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.