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?
5 réponses
je mets ma réponse dans un format similaire à cette réponse .
Voici l'étiquette originale:
rotation de 90 degrés dans le sens des aiguilles d'une montre:
yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)
rotation de 180 degrés:
yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
Rotation de 90 degrés dans le sens contraire des aiguilles d'une montre:
yourLabelName.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2)
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)
où 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
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)
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)
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
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)