투케이2K

73. (ios/swift) 원형 로딩 프로그레스 (progress) 생성 실시 - UIActivityIndicatorView 본문

IOS

73. (ios/swift) 원형 로딩 프로그레스 (progress) 생성 실시 - UIActivityIndicatorView

투케이2K 2021. 12. 7. 09:16

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스코드 : S_Extension]

import Foundation
import UIKit


// MARK: - [전역 변수 선언 실시]
var vProgress : UIView?



// MARK: - [extension 정의 실시 : 뷰 컨트롤러]
extension UIViewController {
    
    // MARK: [원형 프로그레스 시작 메소드]
    // [호출 방법 : self.progressStart(onView: self.view)]
    func progressStart(onView : UIView) {
        print("")
        print("===============================")
        print("[S_Extension >> progressStart() :: 로딩 프로그레스 시작 실시]")
        print("===============================")
        print("")
        // [프로그레스를 담는 부모 뷰 : 검정색]
        let progressView = UIView.init(frame: onView.bounds)
        progressView.backgroundColor = UIColor.init(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)
        
        // [Indicator : 원형 프로그레스 생성 실시]
        let activityIndicator = UIActivityIndicatorView()
        
        // [사이즈 지정 실시]
        //activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
        activityIndicator.transform = CGAffineTransform(scaleX: 2.5, y: 2.5)
        
        // [위치 지정 실시]
        activityIndicator.center = progressView.center
        
        // [색상 지정 실시]
        activityIndicator.color = UIColor.red
    
        // [hidden 시 애니메이션 종료 여부 지정]
        activityIndicator.hidesWhenStopped = true
        
        // [스타일 지정 실시]
        activityIndicator.style = UIActivityIndicatorView.Style.white
    
        // [애니메이션 시작 수행]
        activityIndicator.startAnimating()
        
        // [비동기 ui 처리 수행 실시]
        DispatchQueue.main.async {
            progressView.addSubview(activityIndicator) // 부모에 Indicator 자식 추가
            onView.addSubview(progressView) // 뷰컨트롤러에 부모 추가
        }
        vProgress = progressView
    }
    
    
    
    // MARK: [원형 프로그레스 종료 메소드]
    // [호출 방법 : self.progressStop()]
    func progressStop() {
        print("")
        print("===============================")
        print("[S_Extension >> progressStop() :: 로딩 프로그레스 종료 실시]")
        print("===============================")
        print("")
        DispatchQueue.main.async {
            vProgress?.removeFromSuperview() // 뷰에서 제거 실시
            vProgress = nil
        }
    }
}
 

[소스코드 : ViewController]

import UIKit

class ViewController: UIViewController {
    
    // MARK: - [뷰 메모리 로드 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        print("")
        print("===============================")
        print("[ViewController >> viewDidLoad() :: 뷰 메모리 로드 실시]")
        print("===============================")
        print("")
        
        
        // [로딩 프로그레스 호출 수행 실시]
        self.progressStart(onView: self.view)
        
        
        // [일정 시간 후 작업 수행 : 로딩 프로그레스 종료 호출]
        DispatchQueue.main.asyncAfter(deadline: .now() + 6) { // [6초 후에 동작 실시]
            print("")
            print("===============================")
            print("[ViewController >> viewDidLoad() :: 시간 만료]")
            print("===============================")
            print("")
            self.progressStop()
        }
    }
}
 

[결과 출력]

 

 

반응형
Comments