【问题标题】:Using segues to automatically rotate views使用 segue 自动旋转视图
【发布时间】:2011-12-30 18:40:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone ios uistoryboard


    【解决方案1】:

    使用通知。

    -(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 应该是模态的。

    【讨论】:

    • 嗯,我想你误解了我的问题。我想知道如何强制 iPhone 在打开模态视图控制器时改变方向。我已经知道如何处理由用户引起的方向。
    • 我猜有一个设备方向属性。这应该使您能够设置方向。
    • 如果你指的是 UIDevice 的方向属性,那是只读的。
    【解决方案2】:

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

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

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

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

    segue 在 storyboard 中被定义为 Modal,第一个(presenter)视图控制器中的代码看起来很正常:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多