iOS에서 Graphic 요소들을 그려내기 위해 존재하는 것들
Core Graphics 에서 UIKit 으로 갈 수록 간편해지고 코드량도 줄었지만 사용할 수 있는 기능은 제한된다. 반면 저수준의 프래임워크는 보다 많은 기능을 사용할 수 있지만 UIKit, AppKit 에서 기본적으로 제공하는 기능들을 직접 구현해야하는 경우가 생긴다
가운데 보이는 OpenGL은 iOS 디바이스의 Graphics Hardware와 가장 빠르고 직접적인 접근을 지원한다. 하지만 그만큼 간단한 작업조차 굉장히 많은 양의 코드를 필요로 하기 때문에 효율성이 떨어진다. 비효율적인 OpenGL을 보완하기 위해 Core Graphics와 Core Animation이 존재한다.
Core Animation이 제공하는 요소 중 오늘의 주제인 CALayer가 존재한다. CALayer를 제공함으로써 우리는 보다 효율적으로 OpenGL의 장점을 가져갈 수 있다.
그럼 맨 위에 있는 UIKit는 뭘까?
UI(User Interface)라는 이름에서 알 수 있듯이, UIKit 프레임워크는 사용자의 인터페이스를 관리하고, 이벤트를 처리하는게 주 목적인 프레임워크이다.
UIkit에서 주로 처리하는 사용자 이벤트로는 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리 등이 있다. 또한 테이블뷰, 슬라이더, 버튼, 텍스트 필드, 얼럿 창 등 애플리케이션의 화면을 구성하는 요소도 포함한다.
그렇기 때문에, 우리가 자주 사용하는 UIViewController, UIView(당연히 이를 상속하는 Button, TextField 등도 포함), UIAlertController등 앞에 UI가 붙는 클래스들을 사용하려면 반드시 UIkit를 상속해야 한다.
UIView에서의 Layer객체
Layer객체는 UIView에 속하며, UIView를 지원해주는 역할을 한다. UIView는 1.화면표시 2.터치 이벤트 처리 3.subView 등의 작업을 하는데 이때, 1.화면표시(실제로 뷰 위에 컨텐츠나 애니메이션을 그리는 행위)는 자신이 직접 행하지 않고 UIKit에 의해 Core Animation에게 위임하게 된다. 아까 언급한 것처럼 Core Animation이 제공하는 요소에는 CALayer가 있다. CALayer가 바로 그 역할을 수행하게 되는것이다.
CALayer의 속성으로는 대표적으로 cornerRadius, shadow, border, frame, bounds 등이 있다!
clipsToBounds, masksToBounds
이건 그냥 내가 궁금해서 쓰는 주제이다. cornerRadius나 shadow 관련 코드에서 많이 보이는 clipsToBounds, masksToBounds가 무슨 역할을 하는지 잘 몰라서 한번 찾아보았다.
둘은 같은 역할을 하지만 프로퍼티가 속한 곳이 다르다. clipsToBounds는 UIView, masksToBounds는 CALayer에 속해 있다.
둘은 SubView나 SubLayer의 내용(글씨 등)이 루트 Layer의 경계를 무시하고 자신을 보여주느냐 경계에 맞추어 잘리느냐를 설정해주는 Bool타입의 메서드이다.
도움을 준 좋은 블로그
[ios] CALayer
[ios] CALayer 안녕하세요. 오늘은 iOS에서 상당히 중요한 역할을 하지만 생각보다 다룰일이 많이 없었던 UIView 의 layer 프로퍼티인 CALayer를 공부해보았고 제가 이해한 것을 바탕으로 기록을 해보고자
baked-corn.tistory.com