使用segues自动旋转视图

时间:2011-12-30 18:40:02

标签: iphone ios uistoryboard

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

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

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

2 个答案:

答案 0 :(得分: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];
}
}

segue应该是模态的。

答案 1 :(得分:0)

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

我用UIViewController子类做了这个,我有一个纵向的视图控制器,它以横向方向对视图控制器进行模态转换。关键是告诉第二个控制器不要自动旋转到我不想要的任何方向:

- (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;
    } 
}