빙수왕의 개발일지

UIView의 layer에 대하여 본문

개발/iOS

UIView의 layer에 대하여

빙수킹 2020. 12. 6. 00:43

UIView를 보면 layer 프로퍼티가 있다.

 

이건 CALayer의 객체인데, CALayer의 CA는 Core Animation의 약자이다.

 

* 여기서 잠깐:

우리가 뭐 쓸때 보면 CGColor, CALayer, UIView.... 이런것들이 있는데 여기서 CG CA 이런건 프레임워크의 이름에서 따온 약자이다. CG: Core Graphics -> CA: Core Animations -> UI: UIKit 순서대로 높은 등급이고, 이는 즉 사용하기 쉽다는 뜻이다. 예를들어, 우리가 고급언어라고 하면 사람이 이해하기 쉬운거, 저급언어라고 하면 컴퓨터가 이해하기 쉬운거.. (010101010....)이지 않는가??

이런거처럼 UIKit도 우리가 사용하기 쉬운 대신에,, 누군가 CA의 기능들 중에서 사람들이 자주쓰는걸 가공해서 만든거다보니 할수있는게 아무래도 저급 프레임워크에 비해 제한적이다.. 그래서 우리가 더 멋진효과!! 더 쩌는 애니메이션!!을 사용하기 위해서는 아무래도 CG레벨까지 건드려야 하는 경우가 생길 수 있을 것 같다.

 

다시 본론으로 돌아가서,

우린 이렇게 view의 layer에 접근해서 뭔가를 해주는.. 아래와같은 코드를 자주 쓴다.

cornerRadius를 주면 모서리가 둥글어지지..

 

그럼 왜 view.cornerRadius = 15와 같이 하지 않는것인가?

평소에는 view.backgroundColor = .blue와 같이 하지 않는가? 

view.backgroundColor와 view.layer.backgroundColor은 뭐가 다른가..??

 

사실 같다.

찍어보면 

아래처럼 어떤걸 바꿔도 둘다 똑같은 색으로 바뀜을 알 수 있다.

 

 

https://www.raywenderlich.com/10317653-calayer-tutorial-for-ios-getting-started

 

CALayer Tutorial for iOS: Getting Started

In this article, you’ll learn about CALayer and how it works. You’ll use CALayer for cool effects like shapes, gradients and particle systems.

www.raywenderlich.com

여기를 보면 이 이유가 잘 나와있다.

 

 

UIView는 사실 CALayer의 wrapper일 뿐이다. UIView는 많은 것을 처리하지만 사실 어떤 그림이나 애니메이션들은 직접 제어하지 않고, 내가 view에 어떤 일을 시키면 이 안의 layer객체에서 이 일을 직접 수행한다.

예를들어 위에서 호출한 backgroundColor 세팅도.. view의 backgroundColor을 세팅해주면 결국엔 layer의 background가 바뀌는 것이다.