我遇到(我猜)方向回调问题。 我的应用程序在横向模式下运行,但有两种模式可用(左/右)。 在视图控制器中我有三种方法
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight);
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
// some setup
}
然后我从回调中接触并将它们转换为我的坐标系。
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//...
CGPoint p=[[touches anyObject] locationInView:nil];
// some transforms
}
在所有情况下,这适用于我的所有测试设备(iPhone 3GS - iOS6和iPad2 iOS7)。但是,在App Store发布后,我有两个报告,在屏幕旋转后,触摸不能正常工作(iPad 4和带有iOS6的iPod 4)。我可以假设方法willAnimateRotationToInterfaceOrientation:没有被调用,但我对行为的起源有点困惑(因为对于具有类似系统的其他设备起作用)。你见过类似的问题吗?
答案 0 :(得分:4)
从iOS6开始,不再为不可见的视图控制器调用willAnimateRotationToInterfaceOrientation:
方法。因此,如果您的视图控制器呈现另一个接管,则只有另一个会听到这些通知。
最好将界面方向逻辑移至viewWillLayoutSubviews
和viewDidLayoutSubviews
,并查询[[UIApplication sharedApplication] statusBarOrientation]
属性。