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

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

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

62
задан 23 January 2019 в 07:13

5 ответов

Я помещаю свой ответ в аналогичный формат к [1 111] этот ответ .

Вот исходная маркировка:

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)

Примечания:

Документация для [1 112] CGAffineTransform

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

существуют 2ПЂ радианы в полном кругу (360 градусов). Swift включает полезную константу CGFloat.pi.

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

Автоматическая компоновка:

Автоматическая компоновка не работает с повернутыми представлениями. (См. Кадр по сравнению с Границами для объяснения почему.) Эта проблема может быть решена путем создания пользовательского представления. Этот ответ шоу, как сделать это для UITextView, но это - то же фундаментальное понятие для маркировки или кнопки. (Обратите внимание, что необходимо будет удалить CGAffineTransformScale строка в том ответе, так как Вы не должны зеркально отражать текст.)

Связанный

178
ответ дан 31 October 2019 в 13:10

Если Вы сделаете это много, то Вы будете wan't для создания расширения. Также это позволит Вам поворачивать свое представление 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)
11
ответ дан 31 October 2019 в 13:10

быстро

Поворачивают 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
ответ дан 31 October 2019 в 13:10

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

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
ответ дан 31 October 2019 в 13:10

Адаптированный ответ от 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
ответ дан 31 October 2019 в 13:10

Другие вопросы по тегам:

Похожие вопросы: