繁体   English   中英

如何在Swift中旋转UIButton和UILabel的文本?

[英]How can you rotate text for UIButton and UILabel in Swift?

如何为UIButtonUILabel旋转文本? 90度,180度。

注意:在将此标记为重复之前,我有意将我的问题建模为此问题的Swift版本: 如何在Objective-C中为UIButton和UILabel旋转文本?

我把我的答案格式类似于这样的回答

这是原始标签:

在此输入图像描述

顺时针旋转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的文档

基本格式是CGAffineTransform(rotationAngle: CGFloat) ,其中rotationAngle是弧度,而不是度。

整圆(360度)有2π弧度。 Swift包含有用的常量CGFloat.pi

  • CGFloat.pi =π= 180度
  • CGFloat.pi / 2 =π/ 2 = 90度

自动布局:

自动布局不适用于旋转视图。 (有关解释原因,请参阅Frame vs Bounds 。)可以通过创建自定义视图来解决此问题。 这个答案显示了如何为UITextView执行此操作,但它与标签或按钮的基本概念相同。 (请注意,您必须删除该答案中的CGAffineTransformScale行,因为您不需要镜像文本。)

有关

如果你经常这么做,你就不会做出扩展。 此外,您还可以将视图旋转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)

迅速

顺时针旋转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)

我建议使用带有度数和计数器/顺时针选项的扩展名

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 {}但这显然取决于你

改编自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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM