IT TIP

Swift에서 UIButton 및 UILabel의 텍스트를 어떻게 회전 할 수 있습니까?

itqueen 2020. 11. 25. 21:49
반응형

Swift에서 UIButton 및 UILabel의 텍스트를 어떻게 회전 할 수 있습니까?


UIButton및에 대한 텍스트를 어떻게 회전 할 수 UILabel있습니까? 90도, 180도.

참고 : 이것을 중복으로 표시하기 전에 의도적으로 내 질문을이 질문의 Swift 버전으로 모델링하고 있습니다. Objective-C에서 UIButton 및 UILabel의 텍스트를 어떻게 회전 할 수 있습니까?


이 답변 과 비슷한 형식으로 답변을 입력하고 있습니다.

다음은 원래 레이블입니다.

여기에 이미지 설명 입력

시계 방향으로 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도

자동 레이아웃 :

자동 레이아웃은 회전 된보기에서 작동하지 않습니다. ( 이유에 대한 설명 프레임 대 경계참조하십시오 .)이 문제는 사용자 정의보기를 작성하여 해결할 수 있습니다. 이 답변 은에 대해 수행하는 방법을 보여 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)
    }
}

그런 다음 뷰에서 간단히 회전을 호출 할 수 있습니다.

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)

참고 URL : https://stackoverflow.com/questions/28717634/how-can-you-rotate-text-for-uibutton-and-uilabel-in-swift

반응형