如何在 Swift 中旋转 UIButton 和 UILabel 的文本?
How can you rotate text for UIButton and UILabel in Swift?
如何旋转 UIButton
和 UILabel
的文本? 90度,180度。
注意: 在您将此标记为重复之前,我有意将我的问题建模为此问题的 Swift 版本:How can you rotate text for UIButton and UILabel in Objective-C?
我的回答格式类似于 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 for an explanation why.) This problem can be solved by creating a custom view. 展示了如何为 UITextView
执行此操作,但它与标签或按钮的基本概念相同。(请注意,您必须删除其中的 CGAffineTransformScale
行回答因为你不需要镜像文本。)
相关
swift
顺时针旋转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)
改编 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)
如果你经常这样做,你就不会想要延期了。此外,这将允许您将视图旋转 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)
我建议使用带有 degrees 和 counter/clockwise
选项的扩展
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 {}
但这显然取决于您
如果您使用自定义字体,您可能需要:
rotateLabel.sizeToFit()
如何旋转 UIButton
和 UILabel
的文本? 90度,180度。
注意: 在您将此标记为重复之前,我有意将我的问题建模为此问题的 Swift 版本:How can you rotate text for UIButton and UILabel in Objective-C?
我的回答格式类似于 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 for an explanation why.) This problem can be solved by creating a custom view. UITextView
执行此操作,但它与标签或按钮的基本概念相同。(请注意,您必须删除其中的 CGAffineTransformScale
行回答因为你不需要镜像文本。)
相关
swift
顺时针旋转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)
改编 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)
如果你经常这样做,你就不会想要延期了。此外,这将允许您将视图旋转 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)
我建议使用带有 degrees 和 counter/clockwise
选项的扩展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 {}
但这显然取决于您
如果您使用自定义字体,您可能需要:
rotateLabel.sizeToFit()