Swift: Comment faire tourner le texte pour UIButton et UILabel?

Comment faire tourner le texte pour UIButton et UILabel ? 90 degrés, 180 degrés

Note: avant que vous ne marquiez ceci comme un duplicata, Je modélise intentionnellement ma question comme une version Swift de celle-ci: Objectif C: Comment Pouvez-vous faire tourner du texte pour UIButton et UILabel?

50
demandé sur Community 2015-02-25 14:17:41

5 réponses

je mets ma réponse dans un format similaire à cette réponse .

Voici l'étiquette originale:

enter image description here

rotation de 90 degrés dans le sens des aiguilles d'une montre:

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

enter image description here

rotation de 180 degrés:

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

enter image description here

Rotation de 90 degrés dans le sens contraire des aiguilles d'une montre:

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

enter image description here

faire la même chose pour tourner un bouton. Heureusement, les événements touch sont également tournés de sorte que le bouton est toujours cliquable dans ses nouvelles limites sans avoir à faire quoi que ce soit de plus.

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

Notes:

Documentation pour CGAffineTransform

le format de base est CGAffineTransform(rotationAngle: CGFloat)rotationAngle est en radians, pas en degrés.

il y a 2π radians dans un cercle complet (360 degrés). Swift inclut la constante utile CGFloat.pi .

  • CGFloat.pi = π = 180 degrés 1519550920"
  • CGFloat.pi / 2 = π / 2 =90 degrés

Mise En Page Automatique:

mise en page Automatique n'est pas travailler avec des vues alternées. (Voir Frame vs Bounds pour une explication.) Ce problème peut être résolu en créant une vue personnalisée. Cette réponse montre comment le faire pour un UITextView , mais c'est le même concept de base pour une étiquette ou un bouton. (Notez que vous devrez supprimer la ligne CGAffineTransformScale dans cette réponse puisque vous n'avez pas besoin de faire un miroir du texte.)

Liées

154
répondu Suragch 2017-05-23 12:10:33

swift

rotation de 90 degrés dans le sens des aiguilles d'une montre:

    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)

rotation de 90 degrés dans le sens contraire des aiguilles d'une montre:

    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
répondu Ananthu R Krishnan 2016-08-01 14:09:23

si vous faites ça souvent, vous ne voulez pas faire d'extension. Aussi cela vous permettra de tourner votre vue 0-360 degrés.

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

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

alors vous pouvez simplement appeler rotation sur vos vues

myView.rotate(degrees: 90)
1
répondu drees 2018-06-13 16:00:53

je suggère d'utiliser l'extension avec des options de degrés et dans le sens contraire /horaire

func rotate(degrees: Int , clockwise: Bool)
{
    let x  = 180 / degrees
    if clockwise == true
    {
        self.transform = CGAffineTransform(rotationAngle: CGFloat.pi / CGFloat(x))
    }
    else
    {
        self.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / CGFloat(x))
    }
}

je l'utilise comme extension UILabel {} mais c'est évidemment à vous

1
répondu Deep Blue 2018-09-09 10:16:52

a adapté la réponse d'Ananthur Krishnan à Swift 3.1.

rotation de 90 degrés dans le sens contraire des aiguilles d'une montre:

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
répondu boehlefeld 2017-05-18 15:42:45