UIButton
およびUILabel
のテキストを回転するにはどうすればよいですか? 90度、180度。
注:これを重複としてマークする前に、私の質問をこのバージョンのSwiftバージョンとして意図的にモデリングしています:- Objective-CでUIButtonとUILabelのテキストをどのように回転できますか?
this answer と同様の形式で回答を掲載しています。
元のラベルは次のとおりです。
時計回りに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)
注:
CGAffineTransform のドキュメント
基本的な形式はCGAffineTransform(rotationAngle: CGFloat)
です。rotationAngle
は度ではなくラジアン単位です。
完全な円(360度)には2πラジアンがあります。 Swiftには、便利な定数CGFloat.pi
が含まれています。
CGFloat.pi
=π= 180度CGFloat.pi / 2
=π/ 2 = 90度自動レイアウト:
自動レイアウトは、回転したビューでは機能しません。 (理由については Frame vs Bounds を参照してください。)この問題は、カスタムビューを作成することで解決できます。 この回答 はUITextView
に対してそれを行う方法を示していますが、ラベルまたはボタンの基本概念は同じです。 (テキストをミラーリングする必要がないため、その回答のCGAffineTransformScale
行を削除する必要があることに注意してください。)
関連
これを頻繁に行うと、拡張機能を作成したくありません。また、これにより、ビューを0〜360度回転できます。
extension UIView {
func rotate(degrees: CGFloat) {
rotate(radians: CGFloat.pi * degrees / 180.0)
}
func rotate(radians: CGFloat) {
self.transform = CGAffineTransform(rotationAngle: radians)
}
}
その後、単にビューでrotateを呼び出すことができます
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)