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