CGAffineTransform을 사용하면 UIView에 적용할 transform 연산을 표현할 수 있다. UIView 클래스에 CGAffineTransform 타입의 transform 프로퍼티가 있기 때문에 CGAffineTransform 객체를 직접 만들지 않고 UIView의 transform 프로퍼티에 접근해서 객체를 가져올 수도 있다. 이 transform 프로퍼티를 이용해서 슈퍼뷰 좌표계에서 View의 프레임 사각형의 크기를 조정하거나 회전할 수 있다. animation 블록에서 transform 프로퍼티의 값을 변경하면 자동으로 애니메이션과 함께 transform이 된다.

Affine Transformation

Affine 변환 행렬은 하나의 좌표계에 있는 점을 다른 좌표계로 매핑할 때 사용된다. Affine 변환 행렬을 사용하면 회전/스케일/이동/비틀기를 할 수 있다. Affine 변환 행렬은 3 X 3 행렬로 표현된다. 3번째 열은 항상 (0, 0, 1)이고 1∙2번째 열을 통해 transformation을 표현할 수 있다.

affin1.png

각 점(x, y)을 나타내는 행 벡터에 Affine 변환 행렬을 곱해서 새로운 좌표(x’, y’)를 구할 수 있다.

Untitled

CGAffineTransform

CGAffineTransform은 Affine 변환 행렬을 생성하고, 행렬들을 연결하고, 적용하기 위한 함수를 제공한다. Affine 변환 행렬에서 3번째 열은 항상 (0, 0, 1)이기 때문에 CGAffineTransform은 처음 두 열에 대한 값만 가지고 있다. 단순히 도형을 이동하거나 회전하는 애니메이션이 필요하다면 Affine 변환 행렬을 직접 만들지 않고 CGAffineTransform 타입이 제공하는 다양한 메서드(translateBy(x:y:)scaleBy(x:y:)rotate(by:))를 사용하면 된다. 나중에 재사용하고 싶은 Affine 행렬만 생성해두면 된다.