将 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
,因为.pi
是Double
。谢谢!
你说得对,.pi
是 Double
的成员,但它也是 CGFloat
和 Float
的成员: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.transform
是 property
的 UIView
而不是 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 度的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章