iOS

[IOS/ Swift] 메인스레드 작업 우선순위 - Activity Indicator 지연문제

ohlee52 2024. 11. 7. 14:53
반응형

문제 상황

Activity Indicator를 사용해 로딩표시를 하려는데, 로딩 시작할때 안뜨고 로딩이 다 끝날때쯤 반짝 뜨고 사라짐.

Chat GPT와 몇번의 대화를 통해 실마리를 잡음.

 메인스레드에서 뒤에오는 작업(로딩부분)에 밀려서 인디케이터가 나중에 뜸. 

 

@objc private func okButtonPressed() {
    mainView.activityIndicator.startAnimating() //인디케이터 작동명령
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { //딜레이 주기
        if let pdfData = PDFManager.shared.makePDF(...) {
            let activityViewController = UIActivityViewController(activityItems: [pdfData], applicationActivities: nil)
            self.present(activityViewController, animated: true) {
                self.mainView.activityIndicator.stopAnimating()
            }
        }
    }
}

 

해결 방법: 딜레이 추가

다음 작업을 다른 스레드로 보내는게 합당해 보였지만, 다음 작업에도 UI 함수들이 숨어있어서 복잡해질것 같았다.

그래서 약간의 딜레이를 주어 인디케이터 작업과 다음 작업간에 구분을 주어서 애니메이션이 우선적으로 표시되도록 보장함. 

 

반응형