UIKit의 컴포넌트들의 크기나 사이즈를 정의할 때 CGFrame, CGRect처럼 앞에 'CG'가 붙는것을 많이 봤다. 바로 Core Graphics 의미하는 것이다. 그렇다면 Core Graphics 뭔지 알아보자!
"애플 개발문서를 보면 Quartz 기술의 높은 출력 품질을 가진 가벼운 2D 렌더링을 수행하기 위해 Core Graphics를 활용해라. 경로(Path) 기반 그리기, 안티앨리어싱 렌더링, 그라데이션, 이미지, 색상 관리, PDF 문서 등을 처리해라." 라고 표현하고 있다. 사실 무슨말인지 잘 모르겠다 하나하나 살펴보자.
Quartz기술?
: macOS 및 iOS에서 2D 그래픽 렌더링을 위한 기술, Core Graphics 프레임 워크는 Quartz기술을 기반으로 그래픽 처리릉 담당
높은 출력 품질? 가벼운 렌더링?
: 효울적으로 처리하고 빠르게 결과물을 생성하고 그래픽 처리 작업은 경량화 되어 최소한의 자원을 사용하여 렌덩링 하는것을 의미
경로 기반 그리기?
: 패스를 사용하여 그림을 그리는 방법, 점들을 연결하여 모양을 정의하고, 이 모양을 따라 화면에 선, 곡선, 다각형 들을 그리는 방식
안티앨리어싱?
: 안티앨리어싱은 그래픽 요소의 가장자리를 부드럽게 만들어주고 고화질의 출력을 제공
색상 관리
: 다양한 색상 공간(RGB, CMYK 등)을 제공하여 각각의 목적에 맞는 색상을 정의하고 다루며 일관된 경험을 제공
PDF 문서 처리
: 위에서 설명한 Quarz는 PDF 문서를 생성하고 부석하여 표시, 다양한 문서 및 이미지 처리작업에 활용된다.
즉, 2D 그래픽 렌더링을 위한 기술인 Quartz기술을 제공하기 위한 프레임 워크로 효율적이고 경령화된 렌더링 방식을 제공하고 패스를 기반으로한 그리기 방식을 사용하며 고화질의 출력을 제공하고 다양한 색상 타입을 제공하며 PDF 문서 처리도 가능한 프레임워크!
Core Graphics는 패스를 통해 2차원 공간을 렌더링 한다고 설명했는데, 다음의 타입들을 통해 구현할 수 있다.
2차원 공간에서 크기, 위치, 변환 등을 나타내기 위한 실수형 기본 데이터 타입이다. 화면의 픽셀과 같은 정밀한 값을 다룰 때 유용하게 사용된다.
X와 Y좌표를 가지고 있는 구조체. 2차원 공간에서 특정 지점을 나타낸다. x와 y의 값으로 CGFloat타입이 할당된다.
CGFloat가 여러 타입으로 초기화 가능하기 때문에 마찬가지로 여러 타입을 x, y 로 입력 가능.
let pointA = CGPoint(x: 100.0, y: 150.0)
let pointB = CGPoint(x: 50.0, y: 75.0)
2차원 공간에서의 크기를 나타내다. 주로 뷰의 크기를 정의할 때 사용된다. 마찬가지로 CGFloat로 width와 height를 구성한다.
// CGSize 정의
let sizeA = CGSize(width: 200.0, height: 150.0)
// CGSize를 이용한 사각형의 넓이 계산
let area = sizeA.width * sizeA.height
2차원 공간에서 사각형의 영역을 나타낸다. 주로 뷰의 프레임을 정의할 때 사용된다. CGRect는 사각형의 origin(원점)과 size(크기)로 구성되어 있다. Origin은 CGPoint로, size는 CGSize로 구성된다.
// CGRect 정의
let rectA = CGRect(x: 50.0, y: 50.0, width: 100.0, height: 75.0)
let rectB = CGRect(x: 0.0, y: 0.0, width: 200.0, height: 200.0)
// CGRect를 이용한 뷰의 프레임 설정
let customView = UIView(frame: rectA)
Point와 Pixel
둘은 비슷하면서 다르다. 포인트는 추상적인 단위로, 디스펠리이의 해상도와 무관한 일관된 크기를 나타낸다. 그래서 같은 비율을 가진 아이폰들은 크기가 달라도 보통 동일한 포인트를 가진다. 반면 픽셀은 디스플레이의 무리적인 지점을 나타낸다.(저화질 화면을 보면 수많은 점들로 이루어진것을 볼 수 있는데 이게바로 픽셀!)
위의 4가지의 타입 말고도 몇개의 타입이 더 있는데 이번에는 중요한 타입들만 우선 알아볼 것이다.
나머지는 미래의 나에게 맡김
사실 기본적으로 직접 그릴 일은 많이 없어서 깊게 다루진 않겠다.
나중에 한번 직접 그려보는 글도 올려보면 좋긴 할듯
Core Graphics 프레임워크에서 제공하는 2차원 그래픽 작업을 수행하기 위해 위해 드로잉과 변형을 적용하는 객체. 이미지를 생성하고 컨텍스트에 직접 그림을 그릴 수 있다.
렌더링하는 데 필요한 그리기 매개변수와 모든 장치별 정보가 포함되어 있다.
Core Graphics 프레임워크에서 제공하는 이미지 표현 형식 중 하나로, 사실 UIImage는 편의 기능들과 함께 내부적으로 CGImage를 활용하여 이미지를 표현하고 있다.
Core graphics 프레임워크에서 제공하는 그래픽 경로(path)를 나타낸다. 선, 곡선, 사각형 등의 도형을 정의하는데 사용된다.
Core Graphics는 화면을 그리는 다양한 기능들이 있는데 이번에는 직접 그리는 방법에 대해서는 다루지 않고 Core Graphics가 뭔지만 가볍게 알아보았다.
추후에 Core Graphics를 이용해서 직접 그려보도록 하겠다.