我根本无法触发UIDeviceOrientationDidChangeNotification
。
我有我的AppDelegate,在这里我添加了一个PolyOrientationViewController
,其UInavigationController
可以推送VerticalNavigationController
和HorizontalViewController
,具体取决于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和Horizontal 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和HorizontalViewController的UINavigationController)或任何会让应用程序完全忽略interfaceOrientation通知?
我希望有人可以指出我的错误:) 提前谢谢。
答案 0 :(得分:7)
Extracted from the documentation,请尝试以下方法:
您可以使用orientation属性获取当前方向,也可以通过注册UIDeviceOrientationDidChangeNotification通知来接收更改通知。在使用这些技术之一获取方向数据之前,必须使用beginGeneratingDeviceOrientationNotifications方法启用数据传递。当您不再需要跟踪设备方向时,请调用endGeneratingDeviceOrientationNotifications方法以禁用通知的传递。
答案 1 :(得分:6)
此症状(在初始化时触发的通知然后停止)听起来像是因为您已停用iPhone中的方向更改。无论如何,这就是发生在我身上的事。