1

我有一个横向 UIViewController,它以纵向模式显示 UINavigationController。当我使用模态 segue 连接从视图控制器到导航控制器时,由于某种原因,视图控制器最初被强制为纵向(最初它应该是横向)。当我删除 segue 时,事情会按预期工作。

期望的行为是使用从横向的界面到纵向的另一个界面的模态segue。

知道这里发生了什么吗?或者如何使其按预期工作?

4

2 回答 2

0

您的意思是最初导航控制器被强制为纵向?

我已经使用 UIViewController 子类完成了此操作,其中我有一个纵向视图控制器,它对横向视图控制器执行模态 segue。关键是告诉第二个控制器不要自动旋转到我不想要的任何方向:

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

我认为,您需要继承 UINavigationController 以便能够设置它。

segue 在情节提要中被定义为 Modal,第一个(演示者)视图控制器中的代码看起来很正常:

-(IBAction) zoomIn:(id)sender {
    [self performSegueWithIdentifier:@"ZoomIn" sender: self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ZoomIn"]) {
        OSZoomViewController *zoom = [segue destinationViewController];
        zoom.image = ...;
        zoom.presenter = self;
    } 
}
于 2012-05-13T05:39:58.577 回答
0

使用通知。

-(void)viewWillAppear:(BOOL) animated{
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(receivedRotate:) name: UIDeviceOrientationDidChangeNotification object: nil];
}

-(void) receivedRotate: (NSNotification*) notification
{
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
{
  [self performSegueWithIdentifier:@"/* Segue from the VCPotrait to VCLandscape*/" sender: self];
}
}

转场应该是模态的。

于 2011-12-30T20:45:48.207 回答