투케이2K

29. (TWOK/UTIL) [Ios/Swift] A_Intro - 로딩 인트로 화면 관련 클래스 정리 본문

투케이2K 유틸파일

29. (TWOK/UTIL) [Ios/Swift] A_Intro - 로딩 인트로 화면 관련 클래스 정리

투케이2K 2022. 3. 28. 16:27

[설 명]

프로그램 : Ios / Swift

설 명 : 로딩 인트로 화면 관련 클래스 정리

 

[소스 코드]

 

import UIKit
import Foundation

class A_Intro: UIViewController {
    
    
    // MARK: - [클래스 설명]
    /*
    // -----------------------------------------
    1. 인트로 로딩 화면 액티비티
    2. 사용하는 스토리보드 : Main
    3. 디바이스 고유값 저장
    4. 네트워크 연결 상태 체크
    5. URL 스키마 접속 확인
    6. 웹뷰 리로드 수행 확인
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [빠른 로직 찾기 : 주석 로직 찾기]
    // -----------------------------------------
    // [SEARCH FAST] : [프리퍼런스 값 초기화 실시]
    // [SEARCH FAST] : [포그라운드 및 백그라운드 상태 확인]
    // [SEARCH FAST] : [디바이스 고유값 확인]
    // [SEARCH FAST] : [네트워크 연결 상태 체크]
    // [SEARCH FAST] : [URL 스키마 접속 확인 실시]
    // [SEARCH FAST] : [웹뷰 리로드 접속 확인 실시]
    // [SEARCH FAST] : [모바일 버전 코드, 버전 명칭 확인 및 저장 실시]
    // -----------------------------------------
    
    
    
    
    
    // MARK: - [전역 변수 선언 실시]
    let ACTIVITY_NAME = "A_Intro"
    
    
    
    
    
    // MARK: - [뷰 로드 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidLoad() :: 뷰 로드 실시]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프리퍼런스 값 초기화 실시]
        S_Preference().introCreateClear()
        // -----------------------------------------
        
        
        // -----------------------------------------
        // [SEARCH FAST] : [디바이스 고유값 확인]
        let deviceID = S_DeviceID().getDeviceID()
        if deviceID != nil
            && deviceID.count > 0
            && deviceID != ""
            && deviceID.trim().equals(_string: "") == false
            && deviceID.isEmpty == false { // [널 값이 아닌 경우]
            print("")
            print("====================================")
            print("[\(self.ACTIVITY_NAME) >> viewDidLoad() :: 저장된 디바이스 고유값 확인 실시]")
            print("-------------------------------")
            print("deviceID :: ", deviceID)
            print("====================================")
            print("")
        }
        else { // [저장된 값이 널인 경우]
            
            // [디바이스 고유값 저장]
            S_DeviceID().createDeviceID()
        }
        // -----------------------------------------
        
        
        // -----------------------------------------
        // [SEARCH FAST] : [모바일 버전 코드, 버전 명칭 확인 및 저장 실시]
        
        // [모바일 버전 코드 : ex : 1]
        let mobileCode = C_Util().getMobileCode()
        S_Preference().setString(_sKey: S_FinalData.PRE_MOBILE_CODE, _sValue: mobileCode)
        
        
        // [모바일 버전 명칭 : ex : 1.0.0]
        let mobileVersion = C_Util().getMobileVersion()
        S_Preference().setString(_sKey: S_FinalData.PRE_MOBILE_VERSION, _sValue: mobileVersion)
        
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidLoad() :: 모바일 버전 코드, 버전 명칭 확인]")
        print("-------------------------------")
        print("mobileCode :: ", mobileCode)
        print("-------------------------------")
        print("mobileVersion :: ", mobileVersion)
        print("====================================")
        print("")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [뷰 로드 완료]
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewWillAppear() :: 뷰 로드 완료]")
        print("====================================")
        print("")
    }
        
    
    
    
    
    // MARK: - [뷰 화면 표시]
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidAppear() :: 뷰 화면 표시]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [포그라운드 및 백그라운드 상태 확인]
        NotificationCenter.default.addObserver( // [포그라운드]
            self,
            selector: #selector(self.checkForeground),
            name: UIApplication.willEnterForegroundNotification,
            object: nil
        )
        NotificationCenter.default.addObserver( // [백그라운드]
            self,
            selector: #selector(self.checkBackground),
            name: UIApplication.didEnterBackgroundNotification,
            object: nil
        )
        // -----------------------------------------
        
        
        // -----------------------------------------
        // [포그라운드 처리 실시]
        self.checkForeground()
        // -----------------------------------------
    }
        
    
    
    
    
    // MARK: - [뷰 정지 상태]
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewWillDisappear() :: 뷰 정지 상태]")
        print("====================================")
        print("")
    }
        
    
    
    
    
    // MARK: - [뷰 종료 상태]
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> viewDidDisappear() :: 뷰 종료 상태]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [포그라운드 및 백그라운드 상태 확인]
        NotificationCenter.default.removeObserver( // [포그라운드]
            self,
            name: UIApplication.willEnterForegroundNotification,
            object: nil
        )
        NotificationCenter.default.removeObserver( // [백그라운드]
            self,
            name: UIApplication.didEnterBackgroundNotification,
            object: nil
        )
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [포그라운드 상태 처리 메소드 작성]
    @objc func checkForeground() {
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> checkForeground() :: 뷰 컨트롤러 포그라운드]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [네트워크 연결 상태 체크]
        if C_StateCheck().getWhatOfNetwork() == true {
            
            // [화면 전환 수행]
            self.intent_A_Main()
        }
        // -----------------------------------------
        else {
            // [알림 팝업창 호출]
            self.showAlert(
                type:0,
                tittle: S_FinalData.AL_TITLE,
                content: S_FinalData.AL_NET + " [\(self.ACTIVITY_NAME)]",
                okBtb: S_FinalData.AL_OK,
                noBtn: ""
            )
        }
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [백그라운드 상태 처리 메소드 작성]
    @objc func checkBackground() {
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> checkBackground() :: 뷰 컨트롤러 백그라운드]")
        print("====================================")
        print("")
    }
    
    
    
    
    
    // MARK: - [액티비티 화면 전환 수행]
    func intent_A_Main(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> intent_A_Main() :: 화면 전환 수행 실시]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        //DispatchQueue.main.asyncAfter(deadline: .now() + 1) { // [딜레이 처리]
        DispatchQueue.main.async { // [일반 처리]
            
            ///*
            // -----------------------------------------
            // [SEARCH FAST] : [ios 버전 분기 처리]
            if #available(iOS 13.0, *) {
                // [스토리보드 사용 : present 방식 : A_MainVC = 스토리보드 아이디 지정 / as = 컨트롤러 지정]
                guard let A_MainVC = self.storyboard?.instantiateViewController(identifier:"A_MainVC") as? A_Main
                else {
                    return
                }
                        
                A_MainVC.modalPresentationStyle = .fullScreen // 전체화면 (기본은 팝업형태)
                self.present(A_MainVC, animated: false, completion: nil) // Intro >> Main 인텐트 이동 실시
            }
            // -----------------------------------------
            else {
                // [스토리보드 사용 : present 방식 : A_MainVC = 스토리보드 아이디 지정 / as = 컨트롤러 지정]
                guard let A_MainVC = self.storyboard?.instantiateViewController(withIdentifier:"A_MainVC") as? A_Main
                else {
                    return
                }
                        
                A_MainVC.modalPresentationStyle = .fullScreen // 전체화면 (기본은 팝업형태)
                self.present(A_MainVC, animated: false, completion: nil) // Intro >> Main 인텐트 이동 실시
            }
            // -----------------------------------------
            // */
        }
        // -----------------------------------------
    }
    
    
    
    
    
    //MARK: - [URL 스키마 접속 체크 실시]
    func urlSchemeCheck(_scheme:String, _host:String, _dataDic:Dictionary<String, Any>){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> urlSchemeCheck() :: URL 스키마 접속 확인 실시]")
        print("-------------------------------")
        print("스키마 :: ", _scheme)
        print("-------------------------------")
        print("호스트 :: ", _host)
        print("-------------------------------")
        print("스키마 데이터 :: ", _dataDic)
        print("====================================")
        print("")
        
        
        /*
        // -----------------------------------------
        MARK: [로직 설명]
        1. SceneDelegate 쪽에서 URL 스키마 접속 시 최초 호출 되는 함수 (urlSchemeCheck)
        2. 인풋 값 : _scheme (스키마) / _host (호스트) / _dataDic (스키마 데이터)
        3. 타입별 스키마 접속 체크 >> 스키마 데이터 저장 수행 실시
        // -----------------------------------------
        // */
        
        
        // -----------------------------------------
        // [SEARCH FAST] : [URL 스키마 접속 확인 실시]
        // -----------------------------------------
        if _scheme == S_FinalData.SCHEME_IN_TITLE_APP
            && _host == S_FinalData.SCHEME_IN_HOST_LOGIN { // MARK: [로그인 연동]
            
            // MARK: [파라미터 값 체크 실시]
            if _dataDic != nil && _dataDic.count > 0 && _dataDic.isEmpty == false {
                
                // [딕셔너리 데이터를 다시 json object 형태로 변환 실시]
                let jsonObj = C_Util().dic_To_JsonObject_String(_dicData: _dataDic)
                
                // [프리퍼런스에 저장 실시]
                S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: jsonObj)
                
                // [로그 출력 실시]
                print("")
                print("====================================")
                print("[\(self.ACTIVITY_NAME) >> urlSchemeCheck() :: URL 스키마 접속 확인 실시]")
                print("-------------------------------")
                print("접속 형태 :: ", "로그인 연동")
                print("-------------------------------")
                print("로 직 :: ", "딕셔너리 >> JSON 문자열 저장 실시")
                print("-------------------------------")
                print("데이터 :: ", S_Preference().getString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN))
                print("====================================")
                print("")
            }
            else {
                print("")
                print("====================================")
                print("[\(self.ACTIVITY_NAME) >> urlSchemeCheck() :: URL 스키마 접속 확인 실시]")
                print("-------------------------------")
                print("접속 형태 :: ", "로그인 연동")
                print("-------------------------------")
                print("로 직 :: ", "데이터 없이 접속")
                print("====================================")
                print("")
            }
        }
        // -----------------------------------------
        else { // MARK: [일반 접속]
            
            // MARK: [파라미터 값 체크 실시]
            if _dataDic != nil && _dataDic.count > 0 && _dataDic.isEmpty == false {
                
                // [딕셔너리 데이터를 다시 json object 형태로 변환 실시]
                let jsonObj = C_Util().dic_To_JsonObject_String(_dicData: _dataDic)
                
                // [프리퍼런스에 저장 실시]
                S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: jsonObj)
                
                // [로그 출력 실시]
                print("")
                print("====================================")
                print("[\(self.ACTIVITY_NAME) >> urlSchemeCheck() :: URL 스키마 접속 확인 실시]")
                print("-------------------------------")
                print("접속 형태 :: ", "일반 접속")
                print("-------------------------------")
                print("로 직 :: ", "딕셔너리 >> JSON 문자열 저장 실시")
                print("-------------------------------")
                print("데이터 :: ", S_Preference().getString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL))
                print("====================================")
                print("")
            }
            else {
                print("")
                print("====================================")
                print("[\(self.ACTIVITY_NAME) >> urlSchemeCheck() :: URL 스키마 접속 확인 실시]")
                print("-------------------------------")
                print("접속 형태 :: ", "일반 접속")
                print("-------------------------------")
                print("로 직 :: ", "데이터 없이 접속")
                print("====================================")
                print("")
            }
        }
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [웹뷰 리로드 수행 체크 부분]
    func webViewReload(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> webViewReload() :: 웹뷰 리로드 수행 체크 실시]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [필요 로직 처리 실시]
        // -----------------------------------------
    }

    
} // [클래스 종료]

 

반응형
Comments