¿Cómo se puede rotar el texto para UIButton y UILabel? 90 grados, 180 grados.

Nota: Antes de marcar esto como un duplicado, estoy intencionalmente modelización mi pregunta como una rápida versión de este: ¿Cómo se puede rotar el texto para UIButton y UILabel en Objective-C?

InformationsquelleAutor Suragch | 2015-02-25

5 Comentarios

  1. 177

    Estoy poniendo mi respuesta en un formato similar al de esta respuesta.

    Aquí está el original de la etiqueta:

    ¿Cómo se puede rotar el texto para UIButton y UILabel en Swift?

    Rotar 90 grados en sentido horario:

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

    ¿Cómo se puede rotar el texto para UIButton y UILabel en Swift?

    Un giro de 180 grados:

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

    ¿Cómo se puede rotar el texto para UIButton y UILabel en Swift?

    Rotar 90 grados en sentido antihorario:

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

    ¿Cómo se puede rotar el texto para UIButton y UILabel en Swift?

    Hacer lo mismo para girar un botón. Afortunadamente, los eventos de toque también te girado para que el botón se puede hacer clic en sus nuevos límites sin tener que hacer nada extra.

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

    Notas:

    Documentación para CGAffineTransform

    El formato básico es CGAffineTransform(rotationAngle: CGFloat) donde rotationAngle está en radianes, no en grados.

    Hay 2π radianes en un círculo completo (360 grados). Swift incluye la utilidad constante CGFloat.pi.

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

    Diseño Automático:

    Diseño automático no funciona con vistas giradas. (Ver Marco vs Límites para una explicación de por qué.) Este problema puede ser resuelto mediante la creación de una vista personalizada. Esta respuesta muestra cómo hacerlo para un UITextView, pero es el mismo concepto básico de una etiqueta o un botón. (Tenga en cuenta que usted tendrá que quitar el CGAffineTransformScale línea en la respuesta ya que no es necesario para reflejar el texto).

    Relacionados con

    • Yo hice lo mismo por mi imageview.Pero mi imagen de obtención de escala (pequeño o grande).cómo hacer para imageviews..?
    • thx mucho !!!
  2. 11

    Si usted hace esto mucho, te wan no para hacer una ampliación. También esto le permitirá girar la vista 0-360 grados.

    extension UIView {
        func rotate(degrees: CGFloat) {
            rotate(radians: CGFloat.pi * degrees / 180.0)
        }
    
        func rotate(radians: CGFloat) {
            self.transform = CGAffineTransform(rotationAngle: radians)
        }
    }

    Entonces usted puede simplemente girar sobre sus puntos de vista

    myView.rotate(degrees: 90)
  3. 6

    swift

    Rotar 90 grados en sentido horario:

        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)

    Rotar 90 grados en sentido antihorario:

        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)
    • usted tiene que asignar marco de nuevo?!
  4. 2

    Me gustaría sugerir el uso de la extensión con opciones de grados y/contador de las agujas del reloj

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

    Yo lo uso como extension UILabel {} pero que es, obviamente, hasta que

  5. 0

    Adaptar la respuesta de Ananthu R Krishnan para encajar en Swift 3.1.

    Rotar 90 grados en sentido antihorario:

    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)

Dejar respuesta

Please enter your comment!
Please enter your name here