web-dev-qa-db-ja.com

SwiftのUIButtonとUILabelのテキストをどのように回転できますか?

UIButtonおよびUILabelのテキストを回転するにはどうすればよいですか? 90度、180度。

注:これを重複としてマークする前に、私の質問をこのバージョンのSwiftバージョンとして意図的にモデリングしています:- Objective-CでUIButtonとUILabelのテキストをどのように回転できますか?

62
Suragch

this answer と同様の形式で回答を掲載しています。

元のラベルは次のとおりです。

enter image description here

時計回りに90度回転:

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

enter image description here

180度回転:

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

enter image description here

反時計回りに90度回転します。

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

enter image description here

同じことをしてボタンを回転させます。ありがたいことに、タッチイベントも回転するので、ボタンは何もすることなく新しい境界でクリック可能です。

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行を削除する必要があることに注意してください。)

関連

176
Suragch

これを頻繁に行うと、拡張機能を作成したくありません。また、これにより、ビューを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)
10
drees

Swift

時計回りに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)
6

度と反時計回りのオプションで拡張機能を使用することをお勧めします

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 {}として使用しますが、それは明らかにあなた次第です

2
DeepBlue

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)
0
boehlefeld