Как вы можете повернуть текст для UIButton и UILabel в Swift? - программирование

Как вы можете повернуть текст для UIButton и UILabel в Swift?

Как вы можете повернуть текст для UIButton и UILabel? 90 градусов, 180 градусов.

Примечание. Прежде чем пометить это как дубликат, я намеренно смоделирую свой вопрос как версию Swift этого: Как вы можете повернуть текст для UIButton и UILabel в Objective-C?

4b9b3361

Ответ 1

Я отвечу в подобном формате этот ответ.

Вот оригинальная метка:

enter image description here

Поверните на 90 градусов по часовой стрелке:

yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)

enter image description here

Поворот на 180 градусов:

yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi)

enter image description here

Поверните на 90 градусов против часовой стрелки:

yourLabelName.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2)

enter image description here

Сделайте то же самое, чтобы повернуть кнопку. К счастью, сенсорные события также вращаются, поэтому кнопка по-прежнему доступна для кликов в новых границах, не делая ничего лишнего.

yourButtonName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)

Примечания:

Документация для CGAffineTransform

Основной формат CGAffineTransform(rotationAngle: CGFloat), где rotationAngle находится в радианах, а не градусах.

Есть 2π радиан в полном круге (360 градусов). Swift включает полезную константу CGFloat.pi.

  • CGFloat.pi= π = 180 градусов
  • CGFloat.pi / 2= π/2 = 90 градусов

Автомакет:

Автомат не работает с повернутыми видами. (См. Frame vs Bounds для объяснения, почему.) Эта проблема может быть решена путем создания настраиваемого представления. Этот ответ показывает, как это сделать для UITextView, но это та же базовая концепция для метки или кнопки. (Обратите внимание, что вам придется удалить строку CGAffineTransformScale в этом ответе, так как вам не нужно отражать текст.)

Похожие

Ответ 2

стремительные

Поверните на 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

Если вы делаете это много, вы не захотите делать расширение. Также это позволит вам повернуть ваш взгляд на 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)

Ответ 4

Я бы предложил использовать расширение с вариантами градусов и против часовой стрелки

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 {} но это, очевидно, зависит от вас

Ответ 5

Адаптирован ответ от 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)