with change and ios swift uibutton rotation uilabel

ios - and - uibutton change text swift



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

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

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


rápido

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

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


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

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


Estoy poniendo mi respuesta en un formato similar a esta respuesta .

Aquí está la etiqueta original:

Girar 90 grados en sentido horario:

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

Girar 180 grados:

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

Girar 90 grados en sentido antihorario:

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

Haga lo mismo para girar un botón. Afortunadamente, los eventos táctiles también se rotan, por lo que aún se puede hacer clic en el botón en sus nuevos límites sin tener que hacer nada adicional.

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

Notas:

Documentación para CGAffineTransform

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

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

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

Diseño automático:

El diseño automático no funciona con vistas giradas. (Consulte Frame vs Bounds para obtener una explicación de por qué). Este problema se puede resolver creando una vista personalizada. Esta respuesta muestra cómo hacerlo para un UITextView , pero es el mismo concepto básico para una etiqueta o botón. (Tenga en cuenta que tendrá que eliminar la línea CGAffineTransformScale en esa respuesta ya que no necesita reflejar el texto).

Relacionado


Si haces esto mucho, no querrás hacer una extensión. Además, esto le permitirá girar su 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 puedes simplemente llamar a rotar en tus vistas

myView.rotate(degrees: 90)


Sugeriría usar extensión con opciones de grados y en sentido antihorario

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

Lo uso como extension UILabel {} pero eso obviamente depende de usted