본문 바로가기
옛날

Activity Indicator 적용 [IOS][Object-C]

by 차가운게 조아 2015. 12. 10.

웹뷰를 이용한 어플리케이션을 개발 중인데, HTTP 통신을 사용하다보니 3G가 느린 환경에서는 데이터를 받아오거나 해당 페이지로 접속을 하는 과정에서 로딩이 길어질 때가 있다. 처음에는 페이지 접속하고 로그인 하는 정도인데 뭐가 느릴까 싶었지만, 느린 환경이 의외로 많고(회사에서 Wi-Fi 끄면 장난 아님), 이때 Activity Indicator가 없으면 기다리는 동안 이게 에러인지 로딩중인지 헷갈릴 때가 많았다. 그래서 결국 구글링을 통해 Activity Indicator를 적용하였고, 적용법은 굉장히 쉬웠다.


1. ㅇㅇㅇ.h 에 정의


@interface ViewController : UIViewController
{
 UIActivityIndicatorView *activityIndicator;
}

 @property (nonatomicretainUIActivityIndicatorView *activityIndicator;

 


인터페이스 안에 UIActivityIndicatorView를 하나 정의해주고, 프로퍼티도 ㄱㄱ



2. ㅇㅇㅇ.m 에 구현


@synthesize activityIndicator;

   
-(void)webViewDidStartLoad:(UIWebView*)webView     

    

// ProgressBar Setting   

   activityIndicator = [[UIActivityIndicatorView allocinitWithFrame:CGRectMake(003232)];    
   [activityIndicator setCenter:self.view.center];
   [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
   [self.view addSubview : activityIndicator];    
   
   // ProgressBar Start
   activityIndicator.hiddenFALSE;
   [activityIndicator startAnimating];    

}    


- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [activityIndicator stopAnimating];     
    activityIndicator.hiddenTRUE;
}


위 경우, 웹뷰에 Activity indicator를 적용하는 것이기 때문에 webViewDidStartLoad라는 메서드 안에서 Activity Indicator를 활성화시키고, webViewDidFinishLoad 메서드 안에서 비활성화 시켰다. 활성화, 비활성화를 원하는 메서드 안에 각각 넣어두면 될 것이다.



처음부터 원리를 다 이해하고 코딩을 한 것이 아니라, 일단 기능 구현이 우선이었기 때문에 사실 위 코드가 정확히 어떤 원리에 의해서 어떻게 적용되고 있는건지는 어렴풋이 짐작만 하고 있는...;;


암튼 기능은 무리없이 구현되는데, 주의할 점은 Activity Indicator 활성화 코드를 포함하고 있는 메서드가 2번 호출이 된다면 Activity Indicator도 2번 만들어지기 때문에 나중에 비활성화 코드가 포함된 메서드가 1번 호출되어도,  Activity Indicator가 남아있을 수 있다. 이 점은 어차피 꼭 Activity Indicator가 아니라도 비효율적인 코드가 될 수 있는 거기 때문에 알아서 주의하면 될 듯.


http://nota.tistory.com/29