如何正确地将UILabel旋转90度?

44

我试图在一个UIView内旋转一个UILabel 90度。以下代码片段是我用Swift尝试实现这个目标的代码:

  //  #define DEGREES_TO_RADIANS(x) (x * M_PI/180.0)

    let angle:CGFloat = (90.0 * 3.14/180.0) as CGFloat
    let rotation = CGAffineTransformMakeRotation(angle)

    self.dayLabel.transform(rotation)

我遇到了几个编译器错误:
1)尝试将弧度转换为角度时,遇到了双倍精度和单倍精度的转换问题,因此必须使用“3.14”而不是“M_Pi”。
2)在尝试对UILabel进行实际变换时,我遇到了以下错误:enter image description here

旋转UILabel 90度的正确方式是什么?


好吧...我知道变换语法是什么了,
这是原始图像:
enter image description here

我的目标是将'TUE'垂直放置在单元格的左侧。
我最初尝试了一个90度的反向旋转:

    self.dayLabel.transform = CGAffineTransformMakeRotation(-90)

然后得到以下结果:
enter image description here

我尝试改变度数,但无法获得稳定的垂直位置。
我能否对转换进行更精细的控制?


为什么要将transform作为方法使用而不是赋值?另外,尝试使用CGFloat构造函数而不是强制转换。 - DeFrenZ
使用弧度而非角度 - Fattie
10个回答

72

以下代码适用于Swift 3、4和5:

dayLabel.transform = CGAffineTransform(rotationAngle: .pi/2)

4
еңЁSwift 3дёӯпјҢжӮЁд№ҹеҸҜд»ҘдҪҝз”Ё.pi / 2.0д»ЈжӣҝCGFloat(M_PI_2)гҖӮ - Vadim Bulavin
1
但是你仍然需要将它转换为 CGFloat,因为 .piDouble 类型。谢谢! - Mette
4
你说得对,.piDouble 的成员,但它也是 CGFloatFloat 的成员:Float.pi, Double.pi, CGFloat.pi - Vadim Bulavin
因此,我的视图框架更新为(x:0,y:0,width:300,height:300)至(-62.132 -62.132; 424.264 424.264)。 - Kiran Sarvaiya

21

试一试这种方法:

dayLabel.transform = CGAffineTransform(rotationAngle: .pi/2)

8
self.dayLabel.transform = CGAffineTransformMakeRotation(M_PI_2)

正确的进行90度旋转变换的方法是使用预定义的弧度值M_PI_2,它对应于90度。


2
需要将mpi2转换为浮点数,如此CGFloat(M_PI_2) - Alan Scarpa
因此,我的视图框架更新为(x:0,y:0,width:300,height:300)至(-62.132 -62.132; 424.264 424.264)。 - Kiran Sarvaiya
M_PI_2现在已经被弃用,您可以使用.pi / 2代替。 - WaleedAmmari

8

使用度数值的 Swift 4 解决方案:

let degrees : Double = -90; //the value in degrees
self.dayLabel.transform = CGAffineTransform(rotationAngle: CGFloat(degrees * .pi/180))

8

swift 4

@IBOutlet weak var ourView: UIView!

    ourView.transform = CGAffineTransform(rotationAngle: CGFloat(Double(-45) * .pi/180))
//i gave it -45 degree.

enter image description here


你可能想在这里使用 CGFloat.pi - HenryRootTwo

2

1
为了简化弧度和角度之间的计算,我甚至建议使用测量 API,它提供了这样的内置功能。
let measurement = Measurement<UnitAngle>(value: 90.0, unit: .degrees)
let angleInRadians = measurement.converted(to: .radians).value
label.transform = CGAffineTransform(rotationAngle: angleInRadians)

0
func rotate(button: UIButton) {
let angles = [CGFloat(Double(270) * .pi/180),
              CGFloat(Double(180) * .pi/180),
              CGFloat(Double(90) * .pi/180),
              CGFloat(Double(0) * .pi/180)
]
for i in 0..<4 {
    UIView.animate(withDuration: 0.125, delay: 0.125 * Double(i), animations: {
        button.transform = CGAffineTransform(rotationAngle: angles[i])
    }, completion: nil)
}

0
dayLabel.transform = dayLabel.transform.rotated(by: .pi / 2)

-8

显然,我必须将其调整到1/100个计数度以微调它的垂直方向:

self.dayLabel.transform = CGAffineTransformMakeRotation(-89.55)

结果:
在此输入图像描述


15
从文档中可以明确得知,CGAffineTransformMakeRotation函数需要一个以弧度为单位的角度作为参数,你只是碰巧找到了一个看起来非常接近你想要的角度。 - DeFrenZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接