본문 바로가기
IT·디지털/IT 개발자 팁

[iOS] 화면 밝기를 강제로 최대값으로 변경 후 다시 복원하는 방법 (2025 최신 기준)

by 가을이짱짱 2013. 10. 11.
반응형

iOS에서 화면 밝기 변경 후 이전 밝기를 복원하기

편의점이나 매장 결제 시, 모바일 바코드를 직원에게 보여줄 때 화면을 자동으로 최대 밝기로 올렸다가 해당 화면이 종료되면 이전 밝기로 복원해달라는 요청을 많이 받습니다.

예전에는 Objective-C에서 UIScreenbrightness를 직접 변경하는 방식으로 구현했고, 아직도 유지보수 중인 레거시 앱에서는 동일한 방식이 사용됩니다.

1. 예전 Objective-C (레거시 프로젝트 유지보수용)

헤더 파일에 저장용 변수 선언:


CGFloat oldBrightness;

ViewDidLoad에서 기존 밝기 저장 + 밝기 강제 최대


- (void)viewDidLoad {
    [super viewDidLoad];

    oldBrightness = [[UIScreen mainScreen] brightness];

    if ([[UIScreen mainScreen] respondsToSelector:@selector(brightness)]) {
        [[UIScreen mainScreen] setBrightness:1.0]; // 밝기 최대
    }

    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; // 화면 자동 잠금 방지
}

ViewWillDisappear에서 밝기 복원


- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    if ([[UIScreen mainScreen] respondsToSelector:@selector(brightness)]) {
        [[UIScreen mainScreen] setBrightness:oldBrightness];
    }
}

이 방식은 과거 iOS ≤ 12 시절 앱에서 널리 사용되었고, 바코드/QR/쿠폰 화면에서 최고의 가독성을 위해 여전히 유지보수용 코드에서는 사용 가능합니다.

iOS 앱에서 화면 밝기를 최대값으로 변경하고 다시 복원하는 기능을 시각적으로 표현
화면 밝기를 강제로 최대값으로 변경 후 다시 복원


2. 2025년 기준: Swift + 최신 iOS에서의 올바른 구현

iOS 14 이후, 사용자 프라이버시 정책이 강화되면서 밝기 조작이 일부 상황에서 동작하지 않거나, 제약이 가해질 수 있습니다.
그래도 UIScreen.main.brightness는 여전히 사용할 수 있으며, 다음과 같이 구현합니다.

Swift 최신 버전 예시


import UIKit

class BarcodeViewController: UIViewController {
    private var oldBrightness: CGFloat = UIScreen.main.brightness

    override func viewDidLoad() {
        super.viewDidLoad()

        oldBrightness = UIScreen.main.brightness

        UIScreen.main.brightness = 1.0  // 밝기 최대
        UIApplication.shared.isIdleTimerDisabled = true // 자동 잠금 해제
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        UIScreen.main.brightness = oldBrightness // 복원
        UIApplication.shared.isIdleTimerDisabled = false
    }
}

3. SceneDelegate 사용 중일 때의 주의점

iOS 13+부터는 SceneDelegate가 도입되었기 때문에 다중 Scene 환경(아이패드, 멀티윈도우)에서는 밝기 변경 시점이 Scene 생명주기와 충돌할 수 있습니다.

특히 다음 상황에서:

  • 앱이 백그라운드로 갔다가 다시 돌아올 때
  • 다른 Scene(윈도우)에서 동일한 화면을 띄우는 경우

이를 방지하기 위해 SceneDelegate에서도 복원 로직을 넣을 수 있습니다.


func sceneWillResignActive(_ scene: UIScene) {
    UIScreen.main.brightness = originalBrightness
}

4. 최신 정책에서의 한계 및 주의점

  • iOS는 서드파티 앱의 자동 밝기 설정 기능을 시스템보다 우선 적용하지 못할 때가 있음
  • 다크 모드 / True Tone 활성화 시 환경에 따라 밝기가 자동 조절될 수 있음
  • 제어센터에서 밝기를 갑자기 바꾸면 앱 설정 값과 충돌 가능
  • 아주 짧은 시간 동안 밝기 변경 애니메이션이 보일 수 있음

따라서 “바코드 화면에서만 밝기 최대 + 화면 꺼짐 방지” 같은 기능은 완벽히 보장되는 기능이 아니라, 사용자 환경에 따라 제약이 있을 수 있음을 고려해야 합니다.


5. 결론

  • Objective-C 기반 레거시 프로젝트는 기존 방식 그대로 유지해도 문제 없음
  • Swift 기반 최신 앱은 Scene 생명주기까지 고려한 밝기 복원이 필요함
  • “바코드 / QR / 쿠폰 화면만 밝기 최대로” 기능은 여전히 적용 가능
  • 다만 iOS 자동 밝기·TrueTone 설정이 우선이므로 100% 강제는 불가

이 기능은 실무에서 여전히 많이 사용되는 실용적 기능이니, 바코드 화면 기능이 있는 앱이라면 적용해보셔도 좋습니다.

반응형