1. 방향 상태 얻기
2. 방향 상태 설정하기
3. 로테이션 못받아오는 상황
(1) UINavigationController, UITabbarController 가 상위에 있는 경우
(2) 기타 상황
UIDeviceOrientation * orientation = [UIApplication sharedApplication].statusBarOrientation;
if ( UIDeviceOrientationIsPortrait(orientation) ) {
if ( UIDeviceOrientationIsPortrait(orientation) ) {
...
}
else if( UIDeviceOrientationIsLandscape(orientation) ) {
else if( UIDeviceOrientationIsLandscape(orientation) ) {
...
}
else if( orientation==UIDeviceOrientationUnknown) {
else if( orientation==UIDeviceOrientationUnknown) {
...
}
[[UIDevice currentDevice] orientation] : 아이폰이 누웠을때 UIDeviceOrientationUnknown 를 호출하기 때문에 쓰기 힘들다.
[UIDevice currentDevice] beginGenerationgDeviceOrientationNotifications];
프로그램 시작시 호출해야 시작할때부터 로테이션 상태를 얻을 수 있다.
그래도 안되면.. 나올때까지 계속 재귀적으로 호출해준다. 그러면 나온다..
while(orientation!=UIDeviceOrientationUnknown) {
orientation= [[UIDevice currentDevice] orientation]);
}
이런식으로 해줘도 될거 같긴 한데.. 너무.. 메모리 많이 잡아먹을듯..
performSelector로 afterDelay 조금 조절해가면서 하자.. 물론 나는 0초로.. 하지만서도..
프로그램 시작시 호출해야 시작할때부터 로테이션 상태를 얻을 수 있다.
그래도 안되면.. 나올때까지 계속 재귀적으로 호출해준다. 그러면 나온다..
while(orientation!=UIDeviceOrientationUnknown) {
orientation= [[UIDevice currentDevice] orientation]);
}
이런식으로 해줘도 될거 같긴 한데.. 너무.. 메모리 많이 잡아먹을듯..
performSelector로 afterDelay 조금 조절해가면서 하자.. 물론 나는 0초로.. 하지만서도..
2. 방향 상태 설정하기
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientation];
@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere) // Warning 뜨니깐 추가해주자
- (void) setOrientation:(UIInterfaceOrientation)orientation;
@end
@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere) // Warning 뜨니깐 추가해주자
- (void) setOrientation:(UIInterfaceOrientation)orientation;
@end
[상태바 방향 설정]
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientation animated:YES];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientation animated:YES];
[시작시 로테이션 줄때]
*.plist 에서 Key값 Initial Interface orientation 에서 Value 수정(SDK 4.0이후로 plist가 바뀐듯 싶음..)
참고 : http://www.dejoware.com/blogpages/files/iphone_programming_landscape_view_tutorial.html
*.plist 에서 Key값 Initial Interface orientation 에서 Value 수정(SDK 4.0이후로 plist가 바뀐듯 싶음..)
참고 : http://www.dejoware.com/blogpages/files/iphone_programming_landscape_view_tutorial.html
3. 로테이션 못받아오는 상황
(1) UINavigationController, UITabbarController 가 상위에 있는 경우
이런 경우는 하위의 ViewController에서 암만 shouldAutorotateToInterfaceOrientation에서 리턴값을 YES로 줘도 안돌아간다.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
그냥 상위 뷰컨트롤러(네비게이션컨트롤러, 탭바컨트롤러)를 서브클래싱해서 위의 함수를 오버라이딩시킨다.
참고 : http://developer.apple.com/library/ios/#qa/qa2010/qa1688.html
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
그냥 상위 뷰컨트롤러(네비게이션컨트롤러, 탭바컨트롤러)를 서브클래싱해서 위의 함수를 오버라이딩시킨다.
참고 : http://developer.apple.com/library/ios/#qa/qa2010/qa1688.html
[하위뷰컨트롤러, 뷰에서 이벤트를 받기]
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATION_ROTATE" object:nil];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name::@"NOTIFICATION_ROTATE" object:nil];
}
- (void) viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self name::@"NOTIFICATION_ROTATE" object:nil];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name::@"NOTIFICATION_ROTATE" object:nil];
}
- (void) viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self name::@"NOTIFICATION_ROTATE" object:nil];
}
(2) 기타 상황
이런 경우 못받아옴.. 크윽.. 멋대로 릴리즈하지 맙시다
VC* vc= [[VC alloc] init];
[vc.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[window addSubview:vc.view];
//[vc release];
VC* vc= [[VC alloc] init];
[vc.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[window addSubview:vc.view];
//[vc release];
'Program > iOS' 카테고리의 다른 글
Xcode Archive Version Unspecified (4) | 2011.07.13 |
---|---|
UIWebView User-Agent (1) | 2011.07.11 |
Xcode4 svn login timeout (0) | 2011.05.12 |
AES-128/256 Encryption & Decryption (1) | 2011.04.18 |
Mac - Parallels 한영전환 (1) | 2010.12.24 |