申请不会改变方向

时间:2011-02-14 18:02:29

标签: iphone objective-c orientation screen-orientation

我有一个带有tabbar的应用程序,我想在其中检测界面方向。

我在info.plist中设置了支持的方向。 这是我的主要界面声明:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
   ...
}

这是MyAppDelegate的实现:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
        return NO;
    if (interfaceOrientation == UIInterfaceOrientationLandscapeRight)
        return YES;
    if (interfaceOrientation == UIInterfaceOrientationPortrait)
        return YES;
    if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
        return NO;
    }

并且在我试图检测方向变化的必要视图中,我称这些方法为:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

我已经在这些方法中设置了NSLog打印,但没有一个是注册任何更改。甚至没有在shouldAutorotateToInterfaceOrientation方法中。

任何人都可以帮助我吗?我做错了什么? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

shouldAutorotateToInterfaceOrientation:是您必须在视图控制器中实现的方法,而不是在您的应用委托中。要使标签栏应用程序旋转,标签栏控制器的所有子控件都必须返回YES以获取所请求的界面方向。

同样,willRotateToInterfaceOrientation:didRotateFromInterfaceOrientation:将在视图控制器中实现,而不是像您所说的那样在视图中实现。< / p>

答案 1 :(得分:1)

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

方法必须在viewController中实现,而不是在appdelegate

中实现