1

我有一个简单的 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];

            }

        }
4

2 回答 2

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

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

于 2013-07-28T22:02:01.797 回答
1
[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:@"UIDeviceOrientationDidChangeNotification" 
                                           object:nil];
于 2013-07-28T21:27:02.380 回答