CALayer 다크모드 대응

권승용(Eric)·2025년 1월 15일

TIL

목록 보기
33/38
  • CALayer, CGColor 등 로우레벨 클래스는 다이나믹 컬러를 이해하지 못함.
  • 다이나믹 컬러는 UIKit 컨셉임
  • 따라서 이 경우엔 어떻게 처리해야 할까?

처리 가능한 메소드

  • 모드 변경되면 setNeedsLayout 호출된다. 따라서 전체 레이아웃이 다시 수행됨.
  • 이는 뷰컨과 presentation 컨트롤러에 대응하는 호출들을 포함함
  • 따라서 아래 메소드들 바깥에서는 current trait collection이 어떤 특정한 값을 가진다고 보장되지 않음. 따라서 이 메소드바깥에서 동적 색상을 resolve 해야 한다면 관리가 필요함.

traitCollection에 대응하기

  • 옵션 1

  • 옵션 2

  • 옵션 3

  • 위 방법들은 다크모드로 앱을 시작했을 때 대응하는 방법.
  • 앱 사용 도중 trait이 변경되었을 땐?

변경되는 trait 대응하기

  • 요 traitCollectionDidChange 메소드 안에서, hasDifferentColorAppearance 확인하기
  • 그 이후엔 다이나믹 컬러 resolve 진행하면 됨. (위에서 설정했던 거)
profile
ios 개발자에용

0개의 댓글