如何为UIButton
和UILabel
轮换文字? 90度,180度。
注意:在将此标记为重复之前,我有意将我的问题建模为此版本的Swift版本:How can you rotate text for UIButton and UILabel in Objective-C?
答案 0 :(得分:168)
我的回答方式与this answer类似。
这是原始标签:
顺时针旋转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(rotationAngle: CGFloat)
,其中rotationAngle
以弧度为单位,而不是度数。
整圆(360度)有2π弧度。 Swift包含有用的常量CGFloat.pi
。
CGFloat.pi
=π= 180度CGFloat.pi / 2
=π/ 2 = 90度自动布局:
自动布局不适用于旋转视图。 (有关解释原因,请参阅Frame vs Bounds。)可以通过创建自定义视图来解决此问题。 This answer显示了如何为UITextView
执行此操作,但它与标签或按钮的基本概念相同。 (请注意,由于您不需要镜像文本,因此必须删除该答案中的CGAffineTransformScale
行。)
相关强>
答案 1 :(得分:7)
如果你经常这么做,你就不会进行扩展。此外,您还可以将视图旋转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)
答案 2 :(得分:6)
顺时针旋转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)
答案 3 :(得分: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 {}
,但这显然取决于您
答案 4 :(得分:0)
改编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)
答案 5 :(得分:0)
如果您使用自定义字体,您可能需要:
rotateLabel.sizeToFit()