将 UILabel 旋转 90 度的正确方法是啥?

Posted

技术标签:

【中文标题】将 UILabel 旋转 90 度的正确方法是啥?【英文标题】:What's the correct way to rotate a UILabel 90 degrees?将 UILabel 旋转 90 度的正确方法是什么? 【发布时间】:2015-02-04 02:41:18 【问题描述】:

我正在尝试在 UIView 中将 UILabel 旋转 90 度。

下面的 sn-p 尝试用 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) 尝试将弧度转换为角度时遇到了 double --> float 转换问题,因此必须使用 '3.14' 与 'M_Pi'。 2) 尝试在 UILabel 上实际进行转换时出现以下错误:

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


好的...我得到了转换语法但是... 这是原图:

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

    self.dayLabel.transform = CGAffineTransformMakeRotation(-90)

并得到以下信息:

我试图改变度数,但无法获得稳固的垂直位置。 我可以/我可以更严格地控制转换吗?

【问题讨论】:

为什么使用transform作为方法而不是赋值呢?另外,尝试使用 CGFloat 构造函数而不是强制转换。 谢谢!效果很好。 【参考方案1】:

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

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

【讨论】:

您也可以在 Swift 3 中使用 .pi / 2.0 代替 CGFloat(M_PI_2) 但您仍然需要将其设为CGFloat,因为.piDouble。谢谢! 你说得对,.piDouble 的成员,但它也是 CGFloatFloat 的成员:Float.pi, Double.pi, CGFloat.pi 因此我的视图框架更新 (x:0,y:0,width:300,height:300) 到 (-62.132 -62.132; 424.264 424.264)【参考方案2】:

试试这个方法:

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

【讨论】:

【参考方案3】:
self.dayLabel.transform = CGAffineTransformMakeRotation(M_PI_2)

是执行90度变换的正确方法,其中M_PI_2是90度的预定义弧度值。

【讨论】:

需要像这样CGFloat(M_PI_2) 因此我的视图框架更新 (x:0,y:0,width:300,height:300) 到 (-62.132 -62.132; 424.264 424.264) M_PI_2 现已弃用,您可以改用 .pi / 2【参考方案4】:

具有度数的 Swift 4 解决方案:

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

【讨论】:

【参考方案5】:

斯威夫特 4

@IBOutlet weak var ourView: UIView!

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

【讨论】:

您可能想在此处使用CGFloat.pi【参考方案6】:

UIView.transformpropertyUIView 而不是 function。 尝试设置self.label.transform = CGAffineTransformMakeRotation(angle)

更多信息 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/transform

【讨论】:

【参考方案7】:
dayLabel.transform = dayLabel.transform.rotated(by: .pi / 2)

【讨论】:

【参考方案8】:
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)

【讨论】:

【参考方案9】:

显然,我已将其向下调整到 1/100 反度以使其垂直:

self.dayLabel.transform = CGAffineTransformMakeRotation(-89.55)

结果:

【讨论】:

从文档中可以清楚地看出,CGAffineTransformMakeRotation 以弧度为单位的角度作为参数,您只是碰巧找到了一个看起来与您想要的非常相似的角度。

以上是关于将 UILabel 旋转 90 度的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

编码为旋转 90 度的 base64 图像后

Leecode-48:旋转图像(矩阵顺时针旋转90度)

java实现图片旋转90度的问题

解决ios手机上传竖拍照片旋转90度的问题

求顺时针旋转变换对应的矩阵

CSS3 从 0 旋转到 90,然后从 90 旋转到 180