Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 디스플레이 확대/축소, 화면 확대 모드 감지 방법 (더 큰 텍스트, UIScreen.main.scale, UIScreen.main.nativeScale) 본문

iOS 응용 (swift)

[iOS - swift] 디스플레이 확대/축소, 화면 확대 모드 감지 방법 (더 큰 텍스트, UIScreen.main.scale, UIScreen.main.nativeScale)

jake-kim 2025. 8. 20. 01:22

더 큰 텍스트 효과란?

  • 더 큰 텍스트 효과 사용 시, 시스템 전체에 영향이 가서 아래처럼 UILabel같은 컴포넌트들이 커짐 
    • 더 큰 텍스트 효과 적용 방법은 아래에서 설명
  • 앱 뿐만이 아닌 시스템 앱에도 영향
  • 설정 > 디스플레이 및 밝기 > 디스플레이 확대/축소 > 

더 큰 텍스트 선택 시, 적용됨

코드에서 확대/축소 감지 방법

  • UIScreen.main.nativeScale 사용
    • 하드웨어 디스플레이가 렌더링하는 원래 배율을 의미
    • 디스플레이 확대/축소에서 확대 옵션을 켜면 3.0이 3.65625으로 나옴
  • cf) 일반적으로 많이 아는 UIScreen.main.scale은 UIKit이 사용하는 기본 좌표계(points)와 실제 픽셀(pixels)의 배율을 의미
    • 일반 Retina 디스플레이: scale = 2.0
    • Super Retina (iPhone X 이후): scale = 3.0
  • 아래와같이 UIScreen의 확장으로 구현
extension UIScreen {
    static var isDisplayZoomed: Bool {
        let screen = UIScreen.main
        return abs(screen.nativeScale - screen.scale) > .ulpOfOne
    }
}

 

 

 

  • `ulpOfOne`은 0에 가까운 값이며 부동소수점 오차가 있을 수 있기에 이 것을 사용한 것
  • 예) 3.0 - 2.9999999999999996 → 사람이 보기엔 같지만, 기계적으로는 차이가 존재
  • 이런 미세한 차이를 "사실상 0" 으로 처리하기 위해 ulpOfOne 을 임계값으로 둔 것
    • 차이가 ulpOfOne 이하 → 사실상 같은 값 (확대 모드 아님) 
    • 차이가 ulpOfOne 초과 → 의미 있는 차이 (확대 모드임)
Comments