Как можно повернуть текст для UIButton
и UILabel
? 90 градусов, 180 градусов.
Примечание: Перед маркировкой этого как дубликат я намеренно моделирую свой вопрос как версию Swift этого: Как можно повернуть текст для UIButton и UILabel в Objective C?
Я помещаю свой ответ в аналогичный формат к [1 111] этот ответ .
Вот исходная маркировка:
Поворачивают 90 градусов по часовой стрелке:
yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)
Поворачивают 180 градусов:
yourLabelName.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
Поворачивают 90 градусов против часовой стрелки:
yourLabelName.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2)
Делают то же самое для вращения кнопки. К счастью сенсорные события также повернуты так, кнопка все еще активируема по щелчку в своих новых границах, не имея необходимость делать что-либо дополнительное.
yourButtonName.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)
Примечания:
Документация для [1 112] CGAffineTransform
основной формат CGAffineTransform(rotationAngle: CGFloat)
, где rotationAngle
находится в радианах, не градусах.
существуют 2ПЂ радианы в полном кругу (360 градусов). Swift включает полезную константу CGFloat.pi
.
CGFloat.pi
= ПЂ = 180 градусов CGFloat.pi / 2
= ПЂ/2 = 90 градусов Автоматическая компоновка:
Автоматическая компоновка не работает с повернутыми представлениями. (См. Кадр по сравнению с Границами для объяснения почему.) Эта проблема может быть решена путем создания пользовательского представления. Этот ответ шоу, как сделать это для UITextView
, но это - то же фундаментальное понятие для маркировки или кнопки. (Обратите внимание, что необходимо будет удалить CGAffineTransformScale
строка в том ответе, так как Вы не должны зеркально отражать текст.)
Связанный
Если Вы сделаете это много, то Вы будете wan't для создания расширения. Также это позволит Вам поворачивать свое представление 0-360 градусов.
extension UIView {
func rotate(degrees: CGFloat) {
rotate(radians: CGFloat.pi * degrees / 180.0)
}
func rotate(radians: CGFloat) {
self.transform = CGAffineTransform(rotationAngle: radians)
}
}
Затем можно просто звонить, вращаются на представлениях
myView.rotate(degrees: 90)
Поворачивают 90 градусов по часовой стрелке:
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)
Поворачивают 90 градусов против часовой стрелки:
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)
Я предложил бы использовать расширение с опциями градусов и счетчика/по часовой стрелке
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))
}
}
, я использую его в качестве extension UILabel {}
, но это, очевидно, ваше дело
Адаптированный ответ от Ananthu R Krishnan для вписывания в Swift 3.1.
Поворачивают 90 градусов против часовой стрелки:
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)