it-swarm.com.de

Wie können Sie Text für UIButton und UILabel in Swift drehen?

Wie können Sie Text für UIButton und UILabel drehen? 90 Grad, 180 Grad.

Hinweis: Bevor Sie dies als Duplikat markieren, modelliere ich meine Frage absichtlich als Swift-Version dieser Frage: Wie können Sie Text für UIButton und UILabel in Objective-C drehen?

54
Suragch

Ich stelle meine Antwort in einem ähnlichen Format wie diese Antwort .

Hier ist das Originaletikett:

enter image description here

90 Grad im Uhrzeigersinn drehen:

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

enter image description here

Um 180 Grad drehen:

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

enter image description here

90 Grad gegen den Uhrzeigersinn drehen:

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

enter image description here

Machen Sie dasselbe, um eine Taste zu drehen. Glücklicherweise werden die Berührungsereignisse auch gedreht, so dass die Schaltfläche in ihren neuen Grenzen noch anklickbar ist, ohne dass zusätzliche Aktionen erforderlich sind.

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

Anmerkungen:

Dokumentation für CGAffineTransform

Das Basisformat ist CGAffineTransform(rotationAngle: CGFloat), wobei rotationAngle im Bogenmaß und nicht in Grad angegeben ist.

Es gibt 2π Radiant in einem vollen Kreis (360 Grad). Swift enthält die nützliche Konstante CGFloat.pi.

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

Auto Layout:

Das automatische Layout funktioniert nicht mit gedrehten Ansichten. (Eine Erläuterung finden Sie unter Frame vs Bounds .) Dieses Problem kann durch Erstellen einer benutzerdefinierten Ansicht gelöst werden. Diese Antwort zeigt, wie es für eine UITextView gemacht wird, aber es ist das gleiche Grundkonzept für ein Label oder eine Schaltfläche. (Beachten Sie, dass Sie die CGAffineTransformScale-Zeile in dieser Antwort entfernen müssen, da Sie den Text nicht spiegeln müssen.)

Verbunden

161
Suragch

Schnell

90 Grad im Uhrzeigersinn drehen:

    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 Grad gegen den Uhrzeigersinn drehen:

    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

Wenn Sie dies häufig tun, müssen Sie keine Erweiterung vornehmen. Außerdem können Sie die Ansicht um 0 bis 360 Grad drehen.

extension UIView {
    func rotate(degrees: CGFloat) {
        rotate(radians: CGFloat.pi * degrees / 180.0)
    }

    func rotate(radians: CGFloat) {
        self.transform = CGAffineTransform(rotationAngle: radians)
    }
}

Dann können Sie einfach auf Ihre Ansichten drehen

myView.rotate(degrees: 90)
3
drees

Ich würde vorschlagen, Erweiterung mit Optionen von Grad und gegen/im Uhrzeigersinn zu verwenden

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))
    }
}

Ich benutze es als extension UILabel {}, aber das liegt natürlich an Ihnen

2
DeepBlue

Die Antwort von Ananthu R Krishnan wurde an Swift 3.1 angepasst.

90 Grad gegen den Uhrzeigersinn drehen:

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