[iOS] 화면 백그라운드 이동시 블러 처리하기 (sceneWillResignActive Screen Blur)



# __[iOS] 화면 백그라운드 이동시 블러 처리하기 (sceneWillResignActive Screen Blur)__

안녕하세요 __물먹고하자__ 입니다 :)
저희쪽에서 운영하고 있는 그룹웨어가 __공공기관용 배포준비__를 하면서
이슈 전달받았던 정보중 __백그라운드로 진입시 개인정보가 보이면 안된다(?)__
은행권앱에서 보이는 __백그라운드 진입시 (자체로고, 블러)__ 이부분을 말하더라구요.

이부분 처리 과정 공유드립니다.

---
## 1. 백그라운드 진입시 SceneDelegate 확인하기
> 💡저는 SceneDelegate를 사용하고 있어서 Scene에서 진행할 예정인데,
SceneDelegate를 사용하지 않으면 AppDelegate에서 진행하셔도 될 것 같습니다.

<!-- 1. 적용필요예시 -->
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfd2BCOrSmEjLeUfUtlMB2f2GaYV3d5ULZRAMtYFNjywHR9gAkkWenztcCBlxG1pQiNiVs3RuNNNUz_WqZnHT7PfhLXzGKOMCNQ4kxHjEcAC3qMmeBjnE52PjNhjPXlJkN4um-XG6x5rcB4j4va5EpaTvjvPlFPZ1o1ElkOAwNdP4Lyp2rJLraNDw-twNJ/s1600/%E1%84%87%E1%85%A2%E1%86%A8%E1%84%80%E1%85%B3%E1%84%85%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%83%E1%85%B3%E1%84%92%E1%85%AA%E1%84%86%E1%85%A7%E1%86%AB%E1%84%87%E1%85%A9%E1%84%92%E1%85%A9%E1%84%91%E1%85%B5%E1%86%AF%E1%84%8B%E1%85%AD.gif" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="1196" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfd2BCOrSmEjLeUfUtlMB2f2GaYV3d5ULZRAMtYFNjywHR9gAkkWenztcCBlxG1pQiNiVs3RuNNNUz_WqZnHT7PfhLXzGKOMCNQ4kxHjEcAC3qMmeBjnE52PjNhjPXlJkN4um-XG6x5rcB4j4va5EpaTvjvPlFPZ1o1ElkOAwNdP4Lyp2rJLraNDw-twNJ/s1600/%E1%84%87%E1%85%A2%E1%86%A8%E1%84%80%E1%85%B3%E1%84%85%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%83%E1%85%B3%E1%84%92%E1%85%AA%E1%84%86%E1%85%A7%E1%86%AB%E1%84%87%E1%85%A9%E1%84%92%E1%85%A9%E1%84%91%E1%85%B5%E1%86%AF%E1%84%8B%E1%85%AD.gif"/></a></div>

샘플 예시로 백그라운드(sceneWillResignActive) 상태시 __아무처리 없을 시 위와 같이 마지막 보던 화면__이 남아있게 됩니다.

---
## 2. SceneDelegate 코드 적용

> 💡참고 SceneDelegate 함수 활용하여 활성/비활성 시 Blur on/off 처리합니다.
- 화면 활성종료시 : <a href="https://developer.apple.com/documentation/uikit/uiscenedelegate/scenewillresignactive%28_:%29" target="_blank">sceneWillResignActive(_ scene: UIScene)</a>
- 화면 활성시작시 : <a href="https://developer.apple.com/documentation/uikit/uiscenedelegate/scenedidbecomeactive%28_:%29" target="_blank">sceneDidBecomeActive(_ scene: UIScene)</a>

``` swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
	// 블러처리 변수
    var blurView: UIVisualEffectView?
    
    ... (중략) ...
    // 화면 활성시작
    func sceneDidBecomeActive(_ scene: UIScene) {
    	// 블러처리 제거
        if let blurView = blurView {
            blurView.removeFromSuperview()
        }
    }
	// 화면 활성 종료
    func sceneWillResignActive(_ scene: UIScene) {    
     	// 블러처리 진행
        guard let window = window else {
            return
        }
        let effect = UIBlurEffect(style: .regular)
        blurView = UIVisualEffectView(effect: effect)
        blurView?.frame = window.frame
        window.addSubview(blurView!)
    }
    ... (중략) ...
}

```
<!-- 2. 적용 후 이미지 -->
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtel_iP0ha8K8rhckICf75i_2UANYoHShhupGolm6g3gEq5a4V9xw1Nkw2KjLRCXkgWvATjN-m1JtThqSBA7u8lQEJ4vEw2mA2tsagFPjNo72Iio3KdSDEJHWvGuysLAeGmW6paM9rGEzNjhaHjuOPKrfUz2ZKuGG_MwsbsUpljyvd84SWSwXpij3slEgz/s1600/%E1%84%87%E1%85%A2%E1%86%A8%E1%84%80%E1%85%B3%E1%84%85%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%83%E1%85%B3%E1%84%92%E1%85%AA%E1%84%86%E1%85%A7%E1%86%AB%E1%84%87%E1%85%A9%E1%84%92%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%A8%E1%84%8B%E1%85%AD%E1%86%BC.gif" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="1196" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtel_iP0ha8K8rhckICf75i_2UANYoHShhupGolm6g3gEq5a4V9xw1Nkw2KjLRCXkgWvATjN-m1JtThqSBA7u8lQEJ4vEw2mA2tsagFPjNo72Iio3KdSDEJHWvGuysLAeGmW6paM9rGEzNjhaHjuOPKrfUz2ZKuGG_MwsbsUpljyvd84SWSwXpij3slEgz/s1600/%E1%84%87%E1%85%A2%E1%86%A8%E1%84%80%E1%85%B3%E1%84%85%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%83%E1%85%B3%E1%84%92%E1%85%AA%E1%84%86%E1%85%A7%E1%86%AB%E1%84%87%E1%85%A9%E1%84%92%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%A8%E1%84%8B%E1%85%AD%E1%86%BC.gif"/></a></div>

---
## 3. 적용 후 확인작업 중 의도치 않은점(?)
> 💡 iPhone/iPad 둘다 지원하기 때문에 iPad에서 모달이 떠있는경우 전부 테스트시 정상
문제는 오히려 시스템 얼넛이 발생하였을떄도 <a href="https://developer.apple.com/documentation/uikit/uiscenedelegate/scenedidbecomeactive%28_:%29" target="_blank">sceneDidBecomeActive(_ scene: UIScene)</a>이 발생
- __이슈 해결은 못한상태이며, 일단 가려져야하는게 주된포커스라 체크만 해둠__

<!-- 3. 시스템메시지(얼넛) 발생시 -->
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9qFMDekr7t2zkCuyeatWPFjACXpG4s4Wt0CvsX6fCGCDLVj_-ng2_WUXjoAHAPrcfzMsNrAyhpRC2Yl6N0v4UzXCdeOeAUWcgjioYHNHDOsGTXn3AVUJsa2aPn4iWBgnhyphenhyphenfv6E5YcTLJuE2e7YHuJp-LCSNGmhhEiQsyxgMlQSKdU7WrYhpij8n-yyMAN/s1600/%E1%84%89%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%A6%E1%86%B7%E1%84%8B%E1%85%A1%E1%86%AF%E1%84%85%E1%85%B5%E1%86%B7%E1%84%8B%E1%85%B5%E1%84%8B%E1%85%B5%E1%86%BB%E1%84%82%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%AE.png" style="display: block; padding: 1em 0; text-align: center; "><img alt="" border="0" data-original-height="2622" data-original-width="1206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9qFMDekr7t2zkCuyeatWPFjACXpG4s4Wt0CvsX6fCGCDLVj_-ng2_WUXjoAHAPrcfzMsNrAyhpRC2Yl6N0v4UzXCdeOeAUWcgjioYHNHDOsGTXn3AVUJsa2aPn4iWBgnhyphenhyphenfv6E5YcTLJuE2e7YHuJp-LCSNGmhhEiQsyxgMlQSKdU7WrYhpij8n-yyMAN/s1600/%E1%84%89%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%A6%E1%86%B7%E1%84%8B%E1%85%A1%E1%86%AF%E1%84%85%E1%85%B5%E1%86%B7%E1%84%8B%E1%85%B5%E1%84%8B%E1%85%B5%E1%86%BB%E1%84%82%E1%85%B3%E1%86%AB%E1%84%80%E1%85%A7%E1%86%BC%E1%84%8B%E1%85%AE.png"/></a></div>


---
## 마무리
iOS 클라이언트 개발하면서 예전에는 주되게 기획서에 따른 화면 및 동작 흐름, iOS 버전에 따른 신규/유지보수
쪽 위주의 제약만 있었는데, 공공기관쪽 관련 업무를 진행하면서 하나하나 제약사항이 생기긴하네요.

최초에 전달받은 이슈건들은 크게크게 올해 초부터 진행을 했는데도 추가로 나온거 보니 왠지 아직도 더 있는 느낌 ㅠㅠ
그래도 해보고 싶은거 적용해보는것도 좋은것 같습니다.

오늘은 이만~

즐거운 코딩 되게요.

끝.


댓글