-
[CALayer] CALayer의 몇 가지 프로퍼티에 대해서 알아보자.앱등이에게 살충제를 뿌린다./iOS 2017. 6. 6. 22:28
<나연이로 어그로끌기>
모든 UIView는 디폴트로 CALayer타입의 layer프로퍼티를 갖고 있다.
그렇다면 CALayer에 대해서 간단히 알아보자.
- Layer는 Sub layer를 가질 수 있다. UIView가 subview를 갖듯, layer도 sublayer를 가질 수 있다. 이 점을 이용하여 많은 시각적 효과를 표현할 수 있다.
- Layer의 프로퍼티들은 Animating이 가능하다. Layer의 프로퍼티를 변경하면 설정된 시간에 걸쳐서 애니메이션이 진행된다. 이를 통해서 역시나 많은 시각적 효과를 표현할 수 있다.
- Layer는 가볍다. Layer는 UIView에 비해 훨씬 가벼운 객체다. 따라서 UI를 담당하는데 있어서 View보다 나은 퍼포먼스를 기대할 수 있다.
- Layer는 엄~~청나게 많은 프로퍼티를 갖고 있다. 아래에서 간단히 살펴보자.
위 코드를 살펴보자.
1. CALayer인스턴스를 생성하여 someView의 크기로 초기화해준다.
2. layer.contents에 CGImage타입의 이미지를 설정해준다. (gif를 UIImageView에 표현할 때, layer.contents를 사용하면 좋은 퍼포먼스를 기대할 수 있다. Kingfisher에서 이렇게 하는 중)
3. 필터를 사용해서 크기와 위치를 조정할 수 있다.
4. 백그라운드 컬러를 변경했다. 그리고 masksToBounds설정을 통해 layer보다 큰 컨텐츠가 잘리지 않도록 해주었다.
5. layer.cornerRadius를 layer의 가로,세로 길이의 절반인 100으로 설정해주었다. 이렇게 하면 layer가 원으로 표현된다.
결과물은 아래와 같다.
CALayer는 shouldRasterize와 drawsAsynchronously라는 두 가지의 프로퍼티를 제공한다.
shouldRasterize는 디폴트로 false를 갖는다. true로 설정되면 오직 한번만 렌더링하기 때문에 layer의 contents를 표현하는 퍼포먼스가 향상된다. 그러니까 애니메이션 되는 layer가 아닌 한번 렌더링 되면 가만히 있는 layer에 설정해주면 좋다.
drawsAsynchronously는 shouldRasterize와 반대되는 개념이다. 이 놈도 디폴트로 false를 갖는다. 반복적으로 다시 그려져야하는 layer가 있을 때, true로 셋팅을 해주면 퍼포먼스가 향상된다. 계속 particle을 뿜어대는 아래와 같은 layer를 표현할 때 사용하면 좋다.
CALayer를 상속받는 수많은 클래스가 제공된다.
출처 페이지를 들어가보면 10개의 CALayer타입들에 대해서 예제와 프로퍼티를 소개하고 있다.
UI를 아름답게 표현하고자 한다면.. 알아야겠지? 아니라면 댓글부탁드립니다 :)
https://www.raywenderlich.com/90488/calayer-in-ios-with-swift-10-examples
'앱등이에게 살충제를 뿌린다. > iOS' 카테고리의 다른 글
[iOS] 푸쉬를 연속으로 발송하면 몇 개만 옵니다. APNS의 Queue에 대해 알아보자. (0) 2017.06.08 [CALayer] CAScrollLayer에 대해서 알아보자. (0) 2017.06.06 [CAShapeLayer] CAShapeLayer에 CAAnimation 추가하기 (1) 2017.05.25 [UICollectionView] UICollectionViewFlowLayout 그리고 UICollectionViewDelegateFlowLayout (0) 2017.04.14 [iOS] 얼굴인식을 위한 CIDetect를 알아보자. (0) 2017.04.10