iOS/Swift

[iOS] CGAffineTransform - 뷰 객체의 이동, 회전, 크기 조절

2021. 11. 1. 21:56
목차
  1. 정의
  2. 함수 및 속성
  3. 예시
  4. 결론

CGAffineTransform에 대해 알아보자.

 

CGAffineTransform은 앞에 CG를 보고 유추할 수 있는 것처럼, Core Graphics 프레임워크에 속한 구조체이다.

참고로 Affine Transform은 한국말로 직역하면 아핀 행렬이다.

 

정의


애플 공식 문서를 보면 CGAffineTransform은 다음과 같이 정의할 수 있다. 

2D 그래픽을 그리기 위한 아핀 변환 행렬로, 그래픽적으로 객체를 회전, 이동, 크기 조절, 기울기를 조절할 수 있다.
(An affine transformation matrix for use in drawing 2D graphics. An affine transformation matrix is used to rotate, scale, translate, or skew the objects you draw in a graphics context. )

 

아핀 행렬은 선형대수학에서 사용되는 개념이라고 하는데, 알면 좋지만 사용하는 데는 몰라도 상관없다.

간단히 "뷰 객체를 이동, 회전, 크기 조절을 해주는 함수를 가진 구조체"라고 이해하면 될 것 같다.

 

특징은 뷰의 프레임을 계산하지 않고 2D 그래픽을 간단하게 그릴 수 있다는 것이다.

 

함수 및 속성


대표적으로 3가지 생성자와 3가지 인스턴스 메소드가 있다. 그리고 한 개의 타입 프로퍼티가 있다.

3가지 생성자

  • init(scaleX: CGFloat, y: CGFloat) : 사용자가 제공한 값만큼 크기를 조절하여 구성된 아핀 변환 행렬을 반환한다.
  • init(translationX: CGFloat, y: CGFloat) : 사용자가 제공한 값만큼 이동하여 구성된 아핀 변환 행렬을 반환한다.
  • init(rotationAngle: CGFloat)  :  사용자가 제공한 값만큼 회전하여 구성된 아핀 변환 행렬을 반환한다.

3가지 인스턴스 메소드

  • func rotated(by: CGFloat) -> CGAffineTransform : 기존 아핀 변환을 회전하여 구성된 아핀 변환 행렬을 반환한다.
  • func scaledBy(x: CGFloat, y: CGFloat) -> CGAffineTransform : 기존 아핀 변환을 크기 조절하여 구성된 아핀 변환 행렬을 반환한다
  • func translatedBy(x: CGFloat, y: CGFloat) -> CGAffineTransform : 기존 아핀 변환을 이동하여 구성된 아핀 변환 행렬을 반환한다

1가지 타입 프로퍼티

  • static var identity: CGAffineTransform : 아핀 변환 행렬으로 변환된 행렬을 원래 행렬로 복귀시킨다. (원상복구)

 

예시


다음과 같이 뷰를 만들어보자.

let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let view = UIView(frame: rect)
view.backgroundColor = .green

초록 배경을 가진 (0, 0) 좌표의 사각형이 있다.

 

뷰의 이동

init(translationX: CGFloat, y: CGFloat) 를 이용해서 뷰를 이동해보자

rectView.transform = CGAffineTransform(translationX: 50, y: 100)

초록 사각형이 (0,0) 에서 x축으로 50만큼, y축으로 100만큼 이동한다.

 

뷰의 회전

init(rotationAngle: CGFloat) 를 이용해서 뷰를 회전해보자

rectView.transform = CGAffineTransform(rotationAngle: 70)

참고로 view의 transform에 새로운 CGAffineTransform 객체를 할당하면 이전에 적용한 것은 적용되지않는다. 그래서 초록 뷰가 다시 (0,0)으로 돌아왔다.

 

70이란 값을 회전 각도로 주니깐 70도만큼 초록색 뷰가 회전했다.

 

뷰의 크기 조절

init(rotationAngle: CGFloat)을 이용해서 크기를 조절해보자. 

rectView.transform = CGAffineTransform(scaleX: 3, y: 3)

초록색 뷰의 x 3만큼, y 3만큼 커진 것을 확인할 수 있다.

 

한번에 뷰의 이동, 회전, 크기 조절

동시에 세 메소드를 적용하여 한번에 뷰의 이동, 회전 크기를 조절할 수 있다.

rectView.transform = CGAffineTransform(translationX: 50, y: 50)
					.rotated(by: 70)
					.scaledBy(x: 2, y: 2)

 

초록색 뷰를 x축으로 50 y축으로 50만큼 이동한 다음 70도 회전하고, 2만큼 크기를 키운 것이다.

 

뷰의 원상복귀

CGAffineTransform을 적용한 뷰를 원상복귀 시켜보자

rectView.transform = CGAffineTransform.identity

 

결론


CGAffineTransform을 이용하면 뷰 객체를 이동, 회전, 크기 조절을 할 수 있다.

그리고 애니메이션에 적용하여 뷰 객체가 이동, 회전, 크기 조절되는 것을 동적으로 볼 수도 있다.

'iOS > Swift' 카테고리의 다른 글

[iOS] Codable - JSON Encoding 과 Decoding 하기  (0) 2021.12.11
[iOS] UICollectionView의 didSelectItemAt 메소드가 작동하지 않을 때 (Tap Gesture Recognizer)  (0) 2021.11.22
[iOS] Swift - enum (2)  (0) 2021.11.20
[iOS] Swift - enum (1)  (0) 2021.11.17
[iOS] 뷰 컨트롤러 (ViewController)  (0) 2021.08.31
  1. 정의
  2. 함수 및 속성
  3. 예시
  4. 결론
'iOS/Swift' 카테고리의 다른 글
  • [iOS] UICollectionView의 didSelectItemAt 메소드가 작동하지 않을 때 (Tap Gesture Recognizer)
  • [iOS] Swift - enum (2)
  • [iOS] Swift - enum (1)
  • [iOS] 뷰 컨트롤러 (ViewController)
듀IT
듀IT
듀IT
듀 IT
듀IT
전체
오늘
어제
  • 분류 전체보기 (55)
    • iOS (50)
      • iOS 앱 개발 올인원 패키지 Online (34)
      • Swift (16)
    • 자격증 (0)
      • 정보처리기사 (0)
    • 컴퓨터공학 (4)
      • 운영체제 (3)
      • 네트워크 (1)
    • 프로젝트 (1)
      • 환경설정 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 패스트캠퍼스
  • 상속
  • 열거형
  • UIImage
  • 구조체
  • 패스트캠퍼스후기
  • iOS 앱 개발 올인원 패키지 Online
  • UITableView
  • 직장인자기계발
  • 패캠챌린지
  • enum
  • 직장인인강
  • swift
  • structure
  • ios
  • ViewController
  • Convenience
  • closure
  • Optional
  • 생성자

최근 댓글

최근 글

hELLO · Designed By 정상우.
듀IT
[iOS] CGAffineTransform - 뷰 객체의 이동, 회전, 크기 조절
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.