투케이2K

101. (Objective-C/objc) UIActivityIndicatorView 사용해 로딩 프로그레스 바 표시 팝업창 활성 실시 본문

Objective-C

101. (Objective-C/objc) UIActivityIndicatorView 사용해 로딩 프로그레스 바 표시 팝업창 활성 실시

투케이2K 2022. 9. 23. 08:34

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : OBJECTIVE-C

 

[소스 코드]

// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
    printf("\n");
    printf("==================================== \n");
    printf("[ViewController >> testMain() :: 테스트 메소드 수행] \n");
    printf("==================================== \n");
    printf("\n");
    
    
    // [try catch 구문 정의 실시]
    @try {
        
        // [로딩 동작 실시]
        [self startLoading];


        // [dispatch_after 사용해 일정 시간 후 종료 메소드 동작 실시]
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            
            [self stopLoading];
            
        });

    }
    @catch (NSException *exception) {
        printf("\n");
        printf("==================================== \n");
        printf("[ViewController >> catch :: 예외 상황 확인] \n");
        printf("[name :: %s] \n", exception.name.description.UTF8String);
        printf("[reason :: %s] \n", exception.reason.description.UTF8String);
        printf("==================================== \n");
        printf("\n");
    }
}





// MARK: - [로딩 표시 동작 시작 수행 : void 메소드 구현]
- (void)startLoading {
    printf("\n");
    printf("==================================== \n");
    printf("[ViewController >> startLoading() :: 로딩 표시 동작 시작 수행] \n");
    printf("==================================== \n");
    printf("\n");
    
    // [try catch 구문 정의 실시]
    @try {
        
        // [객체 선언 실시]
        UIView *indicatorView;
        UIActivityIndicatorView *activityIndicator;
        UILabel *labelLoading;
       

        // [indicator 전체 영역 부분]
        indicatorView = [[UIView alloc]initWithFrame:CGRectMake([UIApplication sharedApplication].keyWindow.frame.size.width/2-50, [UIApplication sharedApplication].keyWindow.frame.size.height/2-30 , 100, 100)];
        indicatorView.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.8f]; // [투명도 설정]
        [[UIApplication sharedApplication].keyWindow addSubview:indicatorView]; // [뷰에 추가]
        indicatorView.layer.cornerRadius = 8; // [코너 둥글기 설정]
        [[indicatorView layer] setBorderWidth:1.0f]; // [굵기]
        [[indicatorView layer] setBorderColor:[UIColor whiteColor].CGColor]; // [하얀색 색상]
        indicatorView.clipsToBounds = YES;
        indicatorView.tag = 50;

       
        // [로딩 바 영역 부분]
        activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(indicatorView.frame.size.width/2-15, 20, 30, 30)];
        [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge]; // [스타일 설정]
        activityIndicator.tag = 51;
        //activityIndicator.backgroundColor=[UIColor blackColor]; // [로딩 바 배경 색상]
        [indicatorView addSubview:activityIndicator]; // [뷰에 추가]
        [activityIndicator startAnimating]; // [애니메이션 시작]

       
        // [로딩 표시 텍스트 부분]
        labelLoading = [[UILabel alloc]initWithFrame:CGRectMake(0, indicatorView.frame.size.height-30, indicatorView.frame.size.width, 20)];
        labelLoading.text = @"Loading ..."; // [텍스트]
        labelLoading.textColor = [UIColor whiteColor]; // [폰트 색상]
        labelLoading.textAlignment = NSTextAlignmentCenter; // [폰트 정렬]
        labelLoading.font = [UIFont fontWithName:@"YanaR-Bold" size:11]; // [폰트 스타일]
        labelLoading.tag = 52;
        [labelLoading setFont:[UIFont boldSystemFontOfSize:12.0f]]; // [폰트 굵기]
        [indicatorView addSubview:labelLoading]; // [뷰에 추가]

    }
    @catch (NSException *exception) {
        printf("\n");
        printf("==================================== \n");
        printf("[ViewController >> startLoading :: catch :: 예외 상황 확인] \n");
        printf("[name :: %s] \n", exception.name.description.UTF8String);
        printf("[reason :: %s] \n", exception.reason.description.UTF8String);
        printf("==================================== \n");
        printf("\n");
    }
}





// MARK: - [로딩 표시 동작 종료 수행 : void 메소드 구현]
- (void)stopLoading {
    printf("\n");
    printf("==================================== \n");
    printf("[ViewController >> stopLoading() :: 로딩 표시 동작 종료 수행] \n");
    printf("==================================== \n");
    printf("\n");
    
    // [try catch 구문 정의 실시]
    @try {
        
        // [객체 선언 실시]
        UIView *indicatorView;
        UIActivityIndicatorView *activityIndicator;
        UILabel *labelLoading;
       

        // [뷰에서 제거 실시]
        indicatorView = [[UIApplication sharedApplication].keyWindow viewWithTag:50];
        activityIndicator = [indicatorView viewWithTag:51];
        labelLoading = [indicatorView viewWithTag:52];
        [labelLoading removeFromSuperview];
        [activityIndicator removeFromSuperview];
        [indicatorView removeFromSuperview];

    }
    @catch (NSException *exception) {
        printf("\n");
        printf("==================================== \n");
        printf("[ViewController >> stopLoading :: catch :: 예외 상황 확인] \n");
        printf("[name :: %s] \n", exception.name.description.UTF8String);
        printf("[reason :: %s] \n", exception.reason.description.UTF8String);
        printf("==================================== \n");
        printf("\n");
    }
}
 

[결과 출력]


반응형
Comments