투케이2K

41. (ios/swift) 로딩 프로그레스 만들기 - UIAlertController , UIProgressView 본문

IOS

41. (ios/swift) 로딩 프로그레스 만들기 - UIAlertController , UIProgressView

투케이2K 2021. 11. 1. 17:25

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT


[소스 코드]

    // MARK: - [로딩 프로그레스 시작 수행]
    var progressView : UIProgressView!
    var progressAlert : UIAlertController!
    func progressWaitStart(){
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            print("")
            print("===============================")
            print("[A_Main >> progressWaitStart() :: 로딩 프로그레스 호출 실시]")
            print("===============================")
            print("")
            
            self.progressAlert = UIAlertController(title: "Please wait ...", message: "", preferredStyle: .alert)
            self.progressAlert.addAction(UIAlertAction(title: "cancle", style: .default) { (action) in
                // [취소 버튼 클릭 이벤트 내용 정의 실시]
                self.progressWaitStop()
            })

            self.present(self.progressAlert, animated: true, completion: {
                let margin:CGFloat = 8.0 // 마진
                let rect = CGRect(x: margin, y: 72.0, width: self.progressAlert.view.frame.width - margin * 2.0 , height: 2.0) // 크기
                self.progressView = UIProgressView(frame: rect) // 프로그레스 생성
                self.progressView!.progress = 0 // 초기 프로그레스 값
                self.progressView!.tintColor = UIColor.tintColor // 프로그레스 색상
                self.progressAlert.view.addSubview(self.progressView!) // alert에 추가 실시
            })
        }
    }
    
    
    
    // MARK: - [로딩 프로그레스 종료 수행]
    func progressWaitStop(){
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            print("")
            print("===============================")
            print("[A_Main >> progressWaitStop() :: 로딩 프로그레스 종료 실시]")
            print("===============================")
            print("")
            
            if self.progressView != nil && self.progressAlert != nil {
                self.progressAlert.dismiss(animated: false, completion: nil) // 팝업창 지우기 실시
                
                self.progressView = nil // 초기값 지정
                self.progressAlert = nil // 초기값 지정
            }
        }
    }
    
    

    // MARK: - [로딩 프로그레스에 값 지정 실시]
        if self.progressView != nil && self.progressAlert != nil {
            // [프로그레스에 값 지정 0 ~ 1 값 : 소수점 값]
            self.progressView.progress = Float((self.main_webview?.estimatedProgress)!)
            
            // [로딩 완료 상태 체크 : 1 값]
            if Float((self.main_webview?.estimatedProgress)!) >= 1 {
                self.progressWaitStop() // 팝업창 지우기 실시
            }
        }

 


[결과 출력]


 

반응형
Comments