본문 바로가기
iOS/설명

[iOS] CALayer.shouldRasterize

by Sky Titan 2023. 1. 1.
728x90

 

 

CALayer 성능 향상

CALayer를 사용하면서 성능 향상 팁을 설명하고자 합니다. CALayer는 UIView에 프로퍼티(layer)로 선언되어 있으며 여러가지 형태를 변형 시킬 수 있습니다. 간단한 예로는 버튼이나 라벨등 UI 오브젝트

mixup.tistory.com

 

When should I set layer.shouldRasterize to YES

I've seen fixes for some lagyness issues by setting the layer property of the view view.layer.shouldRasterize = YES; I saw a great difference in performance when using a UICollectionView and prep...

stackoverflow.com

 

 

iOS) CALayer 제대로 이해하기

안녕하세요? 소들입니다 :) 오늘은 CALayer에 대해 공부해보려고 해요! UIView는 다음과 같이 CALayer 타입의 layer 라는 프로퍼티를 갖고 있거든여 이 layer는 우리가 직접적이건 간접적이건 꽤나? 건드

babbab2.tistory.com

CALayer.shouldRasterize

  • layer를 합성하기 전에, Bitmap 형식으로 layer를 렌더링 할 것인지 결정하는 프로퍼티이다.
  • 만약 true로 설정하면 layer는 Bitmap형식으로 렌더링되는데 처음 한 번만 렌더링되고 그 이후 애니메이션에선 재활용이 된다.
    • Shadow 효과를 포함한 filters 프로퍼티 안에 포함된 filter 또한 rasterize 되어서 bitmap에 포함된다. 
    • 다만 opacity값은 rasterize 되지 않는다. (투명으로 이루어진 색상은 처리 불가)
    • off-screen 렌더링을 유발하기 때문에 꼭 필요한 경우에만 사용하는게 좋다.
    • overload의 발생주체가 RAM이 된다. (추가적인 cache를 저장하기 때문)
  • 만약 false로 설정하면 필요할 때마다 layer가 렌더링된다. 매번 애니메이션마다 layer를 다시 그린다.
    • overload의 발생주체가 GPU가 된다.

 

true로 설정하면 좋은 경우

  • View가 여러 sublayer혹은 subview, effect 등으로 복잡하게 만들어진 상태에서 UITableView와 같은 컴포넌트 안에서 scroll이 되는 경우, 매우 큰 performance 이슈를 야기할 수 있기 때문에 사용하면 좋다.
  • layer 컨텐츠의 위치는 변해도, 모양은 변하지 않는 경우에 사용하면 좋다.
    • width, height, shadow, cornerRadius, color, internal content 등의 layer의 모양 변화를 야기하는 프로퍼티들의 변화는 cache를 재생성해야되기 때문에 performace에 영향을 준다.

 

사용법

view.layer.shouldRasterize = true
view.layer.rasterizationScale = UIScreen.main.scale
728x90

댓글