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

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

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

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


1. 백그라운드 진입시 SceneDelegate 확인하기

💡저는 SceneDelegate를 사용하고 있어서 Scene에서 진행할 예정인데,
SceneDelegate를 사용하지 않으면 AppDelegate에서 진행하셔도 될 것 같습니다.

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


2. SceneDelegate 코드 적용

💡참고 SceneDelegate 함수 활용하여 활성/비활성 시 Blur on/off 처리합니다.

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!)
    }
    ... (중략) ...
}

3. 적용 후 확인작업 중 의도치 않은점(?)

💡 iPhone/iPad 둘다 지원하기 때문에 iPad에서 모달이 떠있는경우 전부 테스트시 정상
문제는 오히려 시스템 얼넛이 발생하였을떄도 sceneDidBecomeActive(_ scene: UIScene)이 발생

  • 이슈 해결은 못한상태이며, 일단 가려져야하는게 주된포커스라 체크만 해둠

마무리

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

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

오늘은 이만~

즐거운 코딩 되게요.

끝.

댓글