요구사항에 따라 아이폰에 토스트 팝업을 만들일이 생겼다. (아이폰에 토스트 팝업이라니!!!)

그래서 여러 고민 끝에 결론은

어디에서나 화면에 보이는 UIWindow내에 UIView를 삽입하여 화면에 띄우고 애니메이션으로 출력후 종료하도록 하였다.

뷰를 삽입 후 애니메이션으로 출력, 종료까지 잘되었지만 발목을 잡은 것은 바로 회전이였다.

회전을 하게 되면 UIViewController에서 표시되는 뷰와 따로 놀게되고 회전할때도 각각 돌아가게되어 뷰의 모습이 깨지게 되었다.

확인 끝에 중요한 차이점을 알게 되었다

바로 뷰를 삽입하는 방식인다. 기존방식은 새로운 UIWindow를 생성하여 UIView를 입력하는 방식이다.

- (void) makeAlertWindow {

    UIWindow * statusWindow =[[UIWindow alloc]initWithFrame:self.bounds];

    statusWindow.windowLevel = UIWindowLevelAlert;

    statusWindow.hidden = NO;

    statusWindow.backgroundColor = COLOR_CLEAR;

    statusWindow.userInteractionEnabled = NO;

    [statusWindow makeKeyWindow];

    [statusWindow addSubview:self];

    self.alertWindow = statusWindow;

    [statusWindow release];

}


이렇게 만들고나서 회전문제를 처리하려고하니 위와 같은 많은 문제점이 생겼다. 

찾아본 결과 간단한 해결방법이 있었다.

- (void) makeAlertWindow {

    ///< 뷰를 윈도우에 추가하기 위해서 써야한다!!!!!    

    [[[UIApplication sharedApplication] keyWindow] addSubview:self];

}


이렇게 UIView를 삽입하고 나면 UIViewController의 회전과 UIView의 회전이 일치하게 되어 회전 문제를 처리하기 쉽게 되었다.

첨부파일로 소스 전체를 올린다.

'iOS' 카테고리의 다른 글

UITableViewCell 다루기  (0) 2012.02.06
TCP Dump  (0) 2011.12.29
UITableViewCell Custom 오른쪽 화살표 버튼 이미지  (0) 2011.12.27
유용한 오픈소스 링크  (0) 2011.12.21
ActionSheet 버튼 스타일 변경작업  (0) 2011.12.16


아이폰 기본 UINavigationController 사용 외 Custom하는 방법

1. UINavigationController를 상속받은 객체를 생성한다.
-> 초기화시 navigationBarHidden 속성을 YES로 변경한다

#import <Foundation/Foundation.h>
#import "NavViewController.h"

@interface NavController : UINavigationController <UINavigationControllerDelegate> {
NavViewController * i_rootController;
}
@end
-------------------------------------------------------------------------------------------------------------

#import "NavController.h"
@implementation NavController
- (id)init
{
    if(self = [super init])
 {
  self.navigationBarHidden = YES;
 }
    return self;
}
@end


2. 네비게이션을 최초로 실행하는 Controller에서 삽입할 ViewController를 생성한 뒤 위 상속받은 네비게이션컨트롤러에 initWithRootViewController 메소드를 통해 초기화 후 addSubview를 통해 상위 View에 할당한다

UIViewController * navView;
navView = [[NavViewController alloc] init];
i_navControllerArray = [[NavController alloc] initWithRootViewController:navView];
[self.window addSubview:i_navControllerArray.view]; 
[navView release];

3. 생성된 View의 초기화 단계에서는 네이게이션바를 대체할 수있는 커스텀 UI를 생성한다

if(self = [super init])
{
 i_tnb  = [TNB getTnbWithTitle:@"테스트맵" LeftTitle:@"이전" AndRightTitle:@"지도"];
 [i_tnb addTarget:self actionForRightButton:@selector(onShowMapButton:)];
 
 [self.view addSubview:i_tnb];
}

4. 해당 UI에서 네비게이션 버튼 클릭시 발생되는 이벤트시 페이지 이동을 위해서 pushViewController 메소드를 사용하여 신규 View Controller 페이지를 네비게이트 시킨다.
- (void) onShowMapButton:(id)sender
{
 NSLog(@"MapButton");
 
 MapViewController * mapViewController = [[MapViewController alloc]init] ;
 
 [self.navigationController pushViewController:mapViewController animated:YES];
 
 [mapViewController release];
 
}

5. 네이게이트 된 후 이전 페이지로 돌아갈 경우 popViewControllerAnimated 메소드를 사용하여 이전 페이지로 돌아간다
@implementation MapViewController
-(id) init {
 
 if(self = [super init])
 {
  i_tnb  = [TNB getTnbWithTitle:@"맵" LeftTitle:@"이전" AndRightTitle:@"현재위치"];
  [i_tnb addTarget:self actionForLeftButton:@selector(onBackButton:)];
  [self.view addSubview:i_tnb];
 }
 
 return self;
}
- (void) onBackButton:(id)sender
{
 [self.navigationController popViewControllerAnimated:YES];
}
@end

'iOS' 카테고리의 다른 글

오퍼레이션 큐에서 메모리릭 상황  (0) 2011.02.17
메모리릭 현상(1)  (0) 2011.01.31
iPhone TestCase 생성  (0) 2011.01.18
NSOperation  (0) 2011.01.11
NSOperationQueue  (0) 2011.01.10

+ Recent posts