UIDeviceOrientationDidChangeNotification没有解雇?

时间:2010-09-29 11:27:27

标签: ipad

我根本无法触发UIDeviceOrientationDidChangeNotification

我有我的AppDelegate,在这里我添加了一个PolyOrientationViewController,其UInavigationController可以推送VerticalNavigationControllerHorizontalViewController,具体取决于iPad的方向。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    ISPolyOrientationTableViewController *pvc = [[ISPolyOrientationTableViewController alloc] init];
    [window addSubview:pvc.view];
    [pvc release];
    [window makeKeyAndVisible];

    return YES;
}

Poly,Vertical和Horizo​​ntal viewController实现:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

PolyVC,它是最顶级的ViewController,它有以下几种方法:

- (void)viewDidLoad {

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) 
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];

    [super viewDidLoad];
}

它具有相关功能:

- (void)didRotate:(NSNotification *)notification {
    //push the related controller
}

在PolyVC实例化后,调用didRotate:方法,从这里开始,我认为它只是停止生成UIDeviceOrientationDidChangeNotification

我在didRotate:方法中有一个断点,我已经将应用程序加载到iPad上以确保它不是模拟器的东西,我已经制作了一个新的xcode splitViewController项目,测试了旋转工作,删除了代码和粘贴我自己,我已经检查了orientation-lock按钮,我已经尝试实现-(BOOL) ShouldAutoRotate…我既没有被调用,我检查了info.plist指定应用程序支持所有方向,我试过复制从一个工作示例中粘贴每一条通知代码,我发现它会清除错别字。

我完全在我的智慧结束:)这是我可以做的事情,实现UIViewController的某种方式,不使用IB,在ViewControllers中嵌套ViewControllers(PolyViewController拥有拥有Vertical和Horizo​​ntalViewController的UINavigationController)或任何会让应用程序完全忽略interfaceOrientation通知?

我希望有人可以指出我的错误:) 提前谢谢。

2 个答案:

答案 0 :(得分:7)

Extracted from the documentation,请尝试以下方法:

  

您可以使用orientation属性获取当前方向,也可以通过注册UIDeviceOrientationDidChangeNotification通知来接收更改通知。在使用这些技术之一获取方向数据之前,必须使用beginGeneratingDeviceOrientationNotifications方法启用数据传递。当您不再需要跟踪设备方向时,请调用endGeneratingDeviceOrientationNotifications方法以禁用通知的传递。

答案 1 :(得分:6)

此症状(在初始化时触发的通知然后停止)听起来像是因为您已停用iPhone中的方向更改。无论如何,这就是发生在我身上的事。