본문 바로가기

IT/Swift

SVProgressHUD 똘똘하게 사용하기

어플을 쓰다보면 무언가 시간이 오래걸리거나, 로딩을 할때에는 심심치 않게 

아래와 같은 진행바? 같은것을 볼수 있다.


전에 게임제작에 관련되서 글을쓸때도 언급했지만, 인터페이스에서 어쩌면 가장 중요한것은

피드백이라고 할수 있다.


피드백이라 함은 결국 유저가 무엇가를 했을때 그 행위의 결과로 시스템에서 알려주는 것이다.

단순히 버튼을 눌렀을대 '삑' 하고 소리가 난다든지,

버튼의 그림자가 눌려서 눌리는 느낌을 준다든지.


액션겜의 타격감과 같이 구지 게임이 아니더라도 피드백은 인터페이스에서 아주 중요한 위치를 차지하고 있다.




오늘은 이런 피드백중에 보통은 액티비티인디케이터! AcitivityIndicator라고 불리우는 녀석에 대해서 알아보자


그냥 애플에서 제공하는 인디케이터를 사용해도 전~~혀 문제가 없지만,

디자인이 맘에 안들거나 인디케이터 이외에도 화면잠금등의 여러가지 문제때문에

cocoapod의 svprogressHUD를 추천하다.


아마도 많은 개발자들이 이 애드온을 사용하고 있을꺼라고 생각된다.


사용법은 너무 간단해서 걍 건더뛰고...

그냥 쇼하면 나오고 디스미스하면 꺼진다. 뭘 알려줄게 없음


중요한건 현재 git의 공식홈에서도 SVProgressHUD의 사용법중 업데이트가 안된것이 있어서 

공유하면 도움이 될까해서 써본다.



무엇이 업데이트가 안되었냐! 그거슨바로!



[SVProgressHUD show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // time-consuming task
    dispatch_async(dispatch_get_main_queue(), ^{
        [SVProgressHUD dismiss];
    });
});



잘보면 타임컨슈밍 작업을 사이에 넣으라고 한다.


커렇치! 결국 이런 인디케이터는 시간이 걸리는 작업에 유저가 아무런 액션을 취하지 못하도록 하기 위함이다.

단순히 화면이 멈추면 유저는 불안해 하지만, 무언가 빙글빙글 돌아간다면 그저 멍하니 볼테니까


그렇다면 위와 같은 Grand Central Dispatch 이용한 코드는 유용한것이다.


하지만 위의 코드는 현제 스위프트에서는 적용이 안된다. 


그래서 여기저기 알아보고난 결과 다음과 같이 수정하면 똑같이 사용할수 있다.


SVProgressHUD.show(withStatus: "Wait!")

DispatchQueue.global(qos: .userInitiated).async {

            

     //시간걸리는 작업

            

     DispatchQueue.main.async {

       SVProgressHUD.dismiss()

    }

}

요렇게~걍 카피페해서 중간에만 추가하면 끝~~~


요즘은 남들이 만들어놓은게 좋은게 너무 많아서 코딩을 하는건지,

조각조각 붙여서 만드는건지....

쉬운거 같으면서도 이제는 프로그래머라기 보다는 조립하는 사람같다는 느낌이 많이 든다.