如何在ios中执行连续方向检测?

时间:2013-07-28 21:20:05

标签: ios objective-c

我有一个简单的if语句来检测方向并执行操作。这很好用,但它只在第一次工作,它无法再次检测到它。

这个void是否只被调用一次,如果是这样,我怎样才能改变它来不断检查?

我需要将某些内容移至viewDidLoad吗?

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {
        [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

        if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)

        {
            [self.navigationController pushViewController:graphView animated:YES];

        }

            else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
            {
                [self.navigationController pushViewController:graphView animated:YES];
            }

            else if (toInterfaceOrientation == UIInterfaceOrientationPortrait)
            {
                [self.navigationController popToRootViewControllerAnimated:YES];
                NSLog(@"portrait");
            }

            else
            {
                [self.navigationController popToRootViewControllerAnimated:YES];

            }

        }

2 个答案:

答案 0 :(得分:1)

[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:@"UIDeviceOrientationDidChangeNotification" 
                                           object:nil];

答案 1 :(得分:1)

解释@Vjy所写的内容 - 一种解决方案是侦听设备方向通知,然后找到新方向并对其进行响应。

在收到任何设备方向通知之前,您必须致电

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

或者首先不会发送任何通知。开始生成方向通知后,您必须听取它们。 您需要告诉每个相关的视图控制器使用

监听这些通知
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(orientationDetected) //this is your function
                                             name:@"UIDeviceOrientationDidChangeNotification" 
                                           object:nil];

然后在orientationDetected或任何您想要命名的地方 -

- (void) orientationDetected
{
    switch ([[UIDevice currentDevice] orientation])
    {
        case UIDeviceOrientationLandscapeLeft:
             // push appropriate view controller
             break;

        case UIDeviceOrientationPortrait:
             // and so on...
             break;
    }
}

您还可以将通知选择器方法更改为@selector(methodThatReceivesNote:)(请注意冒号)并让您的方法采用(NSNotification*)参数,然后查看[paramName userInfo]以查找相关方向虽然我发现很少有关于UIDevice通知实际包含在userInfo中的信息。

您还可以研究如何在导航控制器的子视图中处理设备方向更改。我环顾四周,但我真的找不到这个。我确信信息在某处,这可能是一个比通知更强大的解决方案。