Notice
Recent Posts
Recent Comments
Link
투케이2K
29. (TWOK/UTIL) [Ios/Swift] A_Intro - 로딩 인트로 화면 관련 클래스 정리 본문
[설 명]
프로그램 : 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("")
// -----------------------------------------
// [필요 로직 처리 실시]
// -----------------------------------------
}
} // [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments