UIViewController 를 이용한 메인뷰 또는 특정뷰에서 일련의 백그라운드 작업시 대기상태를 나타내주는 여러 방법(Modal Popup, Spinner, SubView 등...)들 중에, 카테고리를 이용하여 간단한 Method 호출로 UIViewController 에 오버레이되는 View 를 생성해 보자.
CREATE CATEGORY
UIViewControll+OverlayView.h
1 2 3 4 5 6 7 | #import <UIKit/UIKit.h> @interface UIViewController (OverlayView) -( void )showLayer:( NSString *)message; -( void )hideLayer; @end |
UIViewController+OverlayView.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #import "UIViewController+OverlayView.h" @implementation UIViewController (OverlayView) -( void )showLayer:( NSString *)message { UIView *layer = [[ UIView alloc ] initWithFrame : self .view.bounds]; // layer.alpha = 0.5; layer.backgroundColor = [[ UIColor clearColor ] colorWithAlphaComponent :0 .5 ]; /* Create Label */ UILabel *label = [[ UILabel alloc ] initWithFrame : self .view.bounds]; label.textAlignment = UITextAlignmentCenter ; label.lineBreakMode = YES ; // 개행 설정. label.numberOfLines = 0 ; // 개행 숫자에 제한을 두지 않음. label.backgroundColor = [ UIColor clearColor ]; label.textColor = [ UIColor whiteColor ]; label.text = message; [layer addSubview :label]; [label release ]; /* Add LayerView */ [ self .view addSubview :layer]; [layer release ]; } -( void )hideLayer { NSArray *subViews = [ self .view subviews ]; UIView *layer = [subViews lastObject ]; [layer removeFromSuperview ]; } @end |
※ alpha 를 적용하게되면, UIView *layer 에 올라오는 컨트롤 및 서브뷰들도 해당 alpha value 가 적용되어 보여진다. 반면, backgroundColor 는 해당 View 에만 alpha value 가 적용된다.
USING CATEGORY
ViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #import "ViewController.h" #import "UIViewController+OverlayView.h" @implementation ViewController - ( IBAction )onBtnAction:( id )sender { [ self showLayer : @ "MESSAGE TO SHOW" ]; [ self performSelector : @selector (onHideLayer) withObject : nil afterDelay :2 .0f ]; } - ( void )onHideLayer { [ self hideLayer ]; } @end |
테스트를 위해, 생성된 오버레이뷰를 performSelector 로 2초후 해제되게 작성. UIViewController 를 서브클래싱하는 클래스들에서 해당 카테고리를 임포트하여, 간단히 카테고리 메소드 호출.
RESULT
스크린샷 처럼, Spinner (UIActivityIndicatorView) 를 표시하거나 기타 다른 컨트롤뷰도 해당 오버레이뷰에 추가하여 프로젝트 성격에 맞게끔 커스터마이징.
1 2 3 4 5 6 7 8 9 | /* Create Spinner */ UIActivityIndicatorView *spinner = [[ UIActivityIndicatorView alloc ] initWithActivityIndicatorStyle : UIActivityIndicatorViewStyleWhiteLarge ]; spinner.center = CGPointMake (160 , 200 ); spinner.hidesWhenStopped = NO ; spinner.tag = 100 ; [layer addSubview :spinner]; [spinner startAnimating ]; [spinner release ];
|
'iOS' 카테고리의 다른 글
UIImageView 터치 이벤트 (0) | 2012.09.13 |
---|---|
아이폰 서클(circle 또는 wheel) 메뉴 (0) | 2012.09.13 |
UIImageView를 둥글게 제가 사용한 방법 입니다. (0) | 2012.09.13 |
#iOS RoundRectedImageView 만들기. (0) | 2012.09.13 |
[IPhone] UITextView를 UITextField의 placeholder 처럼 사용하기 (0) | 2012.09.12 |