2013-05-27 2 views
1

미국에서 행복한 기념일!UITabBarController 및 순환 iOS6

iOS 및 Objective-C 프로그래밍을 처음 사용합니다. 몇 주 전에 iOS 5 용으로 설계된 iPad app-in-development를 계승했습니다. 이제 iOS 6의 회전을 제외하고는 모든 것이 작동합니다. iPad 앱이 모든 방향으로 회전해야한다는 것을 알고 있습니다. 원하는), 아직 내 것은하지 않습니다. 모든 것이 iOS 5에서 완벽하게 회전합니다. iOS 6에서 스플래시 화면을 완벽하게 회전시킬 수는 있지만 그게 전부입니다. 제대로 회전하려면 스플래시 화면을 클릭 한 후 활동을 가져올 수 없습니다.

stackoverflow 및 다른 웹 사이트에서 수행해야 할 작업을 알아 내기 위해 -(BOOL)shouldAutorotate-(NSUInteger)supportedInterfaceOrientations을 특정 ViewController에 구현하여 해당보기의 방향 동작을 제어해야한다는 것을 알고 있습니다. 한 VC에서 다른 회전 동작이 전체 앱에 영향을 미칠 수 있다는 것을 읽었습니다. 그래서 나는 ** 찾을 수있는 모든 VC가 YESUIInterfaceOrientationMaskAll을 각각 반환하는 두 개의 IOS 6 메소드를 구현할 것이라고 확신했습니다. 그것은 작동하지 않았다. 이러한 방법으로 self.tabBarController.shouldAutorotateself.tabBarController.supportedInterfaceOrientations을 반환하는 방법에 대해 읽으므로 탭 표시 줄의 회전 동작이 일관되게 유지되지만 작동하지 않습니다. 이 두 가지 방법을 구현하는 범주 (UITabBarController + autoRotate.m 및 .h) 구현에 대해 읽었으며 작동하지 않습니다. 나는 tabBarController를 서브 클래스에 대해 읽고, 나는 내 코드가 않습니다 생각 : 내 AppDelegate에, 나는이

[myWindow setRootViewController:activityViewController]를 호출

activityViewController이

@interface BicycleFamilyActivityViewController : UIViewController <UITabBarControllerDelegate>

에서입니다 클래스 BicycleFamilyAcitivityViewController의 인스턴스입니다

iOS 6 시뮬레이터를 사용하여 성공적인 스플래시 화면 회전 중에 호출되는 것을 조사 할 때 BicycleFamilyAcitivityViewController의 두 구현 된 메소드가 호출되고 있음을 알았습니다 (실제로 각각 두 번). 그 -(void)willAnimateRotationToInterfaceOrientation:duration 그뿐만 아니라입니다. 스플래시 화면을 클릭 한 후 활동을 보면서 회전하려고하면 두 메서드는 한 번만 호출되고 -(void)willAnimateRotationToInterfaceOrientation:duration은 호출되지 않습니다. 두 경우 모두 appDelegate의 -(NSUInteger)application:supportedInterfaceOrientationsForWindow 메서드가 호출됩니다.

전체 앱에서 순환 게재를 수행하는 방법에 대한 조언이 있으십니까? StackOverflow에서 아직 보지 못한 (또는 완전히 이해 된) 대답을 가리키고 있다고해도, 나는 가장 감사 할 것입니다.

미리 감사드립니다.

답변

0

누군가가 사내에서 문제를 파악했습니다. 나는 비슷한 처지를 가진 사람을 돕기 위해 답을 게시 할 것이라고 생각했습니다.

다른 것들 중에서도 시도한 것은 : 내 appDelegate 클래스의 UIWindow를 UIViewController의 하위 클래스 (BicycleFamilyAcitivityViewController)로 설정하는 것입니다. 내 appDelegate에서 나는 가지고 있었다 :

[myWindow setRootViewController:activityViewController]; 

여기서 activityViewController는 UIViewController의 하위 클래스의 인스턴스입니다.

하지만 대리자를 통해 추가 UIWindow를 만든 다음 TabBarController (tbc)를 TabBarController를 빌드 할 때 루트 VC로 지정해야합니다. 내 기본보기 컨트롤러 클래스에서 나는 buildTabBarController 함수를 가졌다. 그래서이 함수의 두 줄은 내 로테이션이 작동하도록했습니다 :

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window]; 
[keyWindow setRootViewController:tbc]; 

희망이 있습니다.

0

가 아이폰 OS 6의 방향 기능 -(BOOL)shouldAutorotateToInterfaceOrientation:interfaceOrientation을 변경 :

은 버니

프로젝트에서 VC 클래스를 찾고, 나는에서 iOS 5의 회전 방법을 구현하는 클래스를 고려하는 것을 확인했다 **. 귀하의 셋업은 viewControllers에 다음과 같아야합니다

-(NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskAll; 
} 

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 
    return UIInterfaceOrientationLandscapeRight; 
} 

-(BOOL)shouldAutorotate { 
    return TRUE; 
} 

UIInterfaceOrientationMaskAll 모든 방향 자세한 내용은 here이다.

+0

Thanks John, preferredInterfaceOrientationForPresentation을 제외하고 viewController에서 해당 메소드를 구현했습니다. 나는 그 차이를 만든 사람을 위해 각 viewController에 그 메소드를 추가했다. 그러나 은 아니었다. 개별 viewController에 shouldAutorotate 및 supportedInterfaceOrientations가 호출되지 않음을 알고 있습니다. 시스템을 호출 할 수 있다면 모든 것이 제자리에 있어야한다고 생각합니다 (회전이 iOS 5에서 완벽하게 작동하기 때문입니다). 다른 제안 사항이 있으십니까? – Bernie

+0

올바른 답변이기 때문에 답을 뽑습니다. 하지만 나는 그렇게하기 위해 15의 평판이 필요합니다! – Bernie

+0

나는 아직 그것을 이해하지 못했다. 내 rootVC (BicycleFamilyActivityViewController)의 shouldAutoRotate 및 supportedInterfaceOrientations 메소드가 회전 할 때 호출되고 YES 및 UIInterfaceOrientationMaskAll을 반환하지만 탭바 또는 아무 것도 회전시키지 않는 것 같습니다. 이 메서드에서 subViewController의 해당 메서드에 대한 호출을 작성할 수는 있지만 도움이되지 않습니다. – Bernie