it-swarm.com.ru

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

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

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

54
Suragch

Я помещаю свой ответ в формате, аналогичном этот ответ .

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

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 в этом ответе, поскольку вам не нужно зеркально отображать текст.)

Связанные с

161
Suragch

Стриж

Повернуть на 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)
6
Ananthu R Krishnan

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

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

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

2
DeepBlue

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