NavigationController를 사용 할 경우 특정 View에서만 회전(Rotate)이 안된다.

그래서 강제로 회전 시켜줘야 한다.

 

 

1)   회전시키고 싶은 viewController.h에서


#import <UIKit/UIKit.h>
#define degreesToRadians(x) (M_PI*(x)/180.0)
@interface viewController : UIViewController {

:

:

}


 

2)   회전시키고 싶은 viewController.m에서  밑에 함수를 추가 해준다.


 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    if(interfaceOrientation == UIInterfaceOrientationPortrait)
    {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];      //Status Bar 회전      
        CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadians(0));               //View 회전
        [self.navigationController.view setTransform:transform];
        [self.navigationController.view setBounds:CGRectMake(0.0, 0.0, 320.0, 480.0)];
                     //View의 영역을 맞춤
    }
    else if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];
      //Status Bar 회전
        CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadians(-90));
               //View 회전
        [self.navigationController.view setTransform:transform];
        [self.navigationController.view setBounds:CGRectMake(0.0, 0.0, 480.0, 320.0)];                     //View의 영역을 맞춤
    }
    else if(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown];    
    //Status Bar 회전   
        CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadians(180));
               //View 회전
        [self.navigationController.view setTransform:transform];
        [self.navigationController.view setBounds:CGRectMake(0.0, 0.0, 320.0, 480.0)];
                     //View의 영역을 맞춤
    }
    else if(interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
      //Status Bar 회전
        CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadians(90));
               //View 회전
        [self.navigationController.view setTransform:transform];
        [self.navigationController.view setBounds:CGRectMake(0.0, 0.0, 480.0, 320.0)];
                     //View의 영역을 맞춤
    }
}


 

3)   해당 viewController.m에서 밑의 함수에 추가해준다.

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES];
 CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadians(0));
 [self.navigationController.view setTransform:transform];
 [self.navigationController.view setBounds:CGRectMake(0.0, 0.0, 320.0, 480.0)];

}

 

 

참고 : http://cafe.naver.com/mcbugi/51367

 

 

이 글은 스프링노트에서 작성되었습니다.

  1. Lee 2012.09.20 20:17

    멋진 소식입니다. 난 아주 뉴스와 아이디어를 검색하고 있습니다. 나는 귀하의 사이트에서 발견 한 뭐, 사실은 매우 콘텐츠입니다. 이 게시물에 대한 오랜 시간을 보냈습니다. 그것은 매우 유용하고 흥미로운 사이트입니다. 감사합니다!

+ Recent posts