iOS에서 화면 밝기 변경 후 이전 밝기를 복원하기
편의점이나 매장 결제 시, 모바일 바코드를 직원에게 보여줄 때 화면을 자동으로 최대 밝기로 올렸다가 해당 화면이 종료되면 이전 밝기로 복원해달라는 요청을 많이 받습니다.
예전에는 Objective-C에서 UIScreen의 brightness를 직접 변경하는 방식으로 구현했고, 아직도 유지보수 중인 레거시 앱에서는 동일한 방식이 사용됩니다.
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/쿠폰 화면에서 최고의 가독성을 위해 여전히 유지보수용 코드에서는 사용 가능합니다.

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% 강제는 불가
이 기능은 실무에서 여전히 많이 사용되는 실용적 기능이니, 바코드 화면 기능이 있는 앱이라면 적용해보셔도 좋습니다.
'IT·디지털 > IT 개발자 팁' 카테고리의 다른 글
| IIS HTTP Err Connection_Dropped 오류의 원인 분석과 실제 해결 사례 (2) | 2013.11.26 |
|---|---|
| [iOS] WebView 백그라운드 투명 처리 (UIWebView → WKWebView 최신 방식 포함) (0) | 2013.10.16 |
| ASP.NET Web Service: wsdl.exe 유틸리티 사용법 정리 (0) | 2013.09.10 |
| [iOS] 옛날 아이폰5 해상도 대응 방식, 지금은 어떻게 해야 할까? (2025년 최신 기준) (0) | 2013.01.08 |
| [iOS] UIAlertView didDismissWithButtonIndex 문제, 지금은 어떻게 해결할까? (UIAlertController 기준) (0) | 2012.12.04 |