代码之家  ›  专栏  ›  技术社区  ›  Michiel de Mare

iPhone应用程序处于横向模式,2008系统

  •  95
  • Michiel de Mare  · 技术社区  · 16 年前

    注:此问题自2008年开始,目前仅具有历史意义。


    无论设备的位置如何,创建一个从一开始就以横向模式运行的iPhone应用程序的最佳方法是什么?

    以编程方式和使用接口生成器。

    8 回复  |  直到 7 年前
        1
  •  46
  •   Fattie    7 年前

    仅限历史答案。非常过时:

    请注意,这个答案现在已经非常过时了。

    这个帖子是 只有历史的好奇心 .


    令人兴奋的消息!正如安德鲁在下面发现的,这个问题已经由苹果在4.0+中解决了。

    似乎不再需要在每一个视图上强制设置视图的大小,并且解决了景观“只在第一次使用”这一特定的严重问题。

    截至2011年4月,不可能测试甚至建造低于4.0的任何东西,所以这个问题纯粹是一个历史性的好奇。令人难以置信的是,它给开发人员带来了这么长时间的麻烦!


    这里是最初的讨论和解决方案。现在这完全无关紧要,因为这些系统甚至都不可操作。


    要使其完全工作是非常困难的——至少有三个问题/错误在起作用。

    试试这个… interface builder landscape design

    特别要注意它所说的 “而且你需要在任何地方正确地使用shouldAtotatePointerFaceOrientation” 它意味着无处不在,所有的全屏视图。

    希望能在这场噩梦中有所帮助!

    这里还有一个重要的提醒,那就是我们手头上的另一个众所周知的问题:如果您试图在 不止一个 视图(所有景观) 它根本不起作用 .记住这一点很重要,否则你会在这个问题上浪费很多时间。这是不可能的。这是iOS平台上最大的开放式、已知的bug。从字面上说,没有办法让硬件成为你加载的第二个视图,成为景观。烦人但简单的解决方法,以及您必须要做的,是拥有一个普通的uiviewcontroller主控器,它只会坐在那里,让您在视图之间进行交换。

    换句话说,在iOS中,由于一个主要的已知错误:

    [window addSubview:happyThing.view];
    [window makeKeyAndVisible];
    

    你只能做一次 . 稍后,如果您试图删除happything.view,而不是将newthing.view放在其中,它将不起作用——就是这样。机器永远不会将视图旋转到横向。没有解决的诀窍,即使苹果不能使它工作。您必须采用的解决方案是拥有一个整体的uiviewcontroller,它简单地位于那里,只保存您的各种视图(happything、newthing等)。希望它有帮助!

        2
  •  40
  •   Michael Pryor    16 年前

    从Apple Dev网站:

    以横向方式启动应用程序 使状态栏位于 立即调整位置,编辑 要添加的info.plist文件 ui接口方向键 适当的价值 (ui界面方向景观 或 ui界面方向图景观左) 如清单2所示。

    清单2:启动应用程序 在横向模式下

    <key>UIInterfaceOrientation</key>
    <string>UIInterfaceOrientationLandscapeRight</string>
    
        3
  •  27
  •   NANNAV gngrwzrd    11 年前

    所有文章的摘要和集成,在自己测试之后;检查下面4.x,5.x的更新。

    从3.2开始,不能从代码更改正在运行的应用程序的方向。

    但是,您可以以固定的方向启动应用程序,尽管这样做并不简单。

    试试这个食谱:

    1. 将方向设置为 UISupportedInterfaceOrientations Info.plist 文件
    2. 在窗口中定义480x320“基础视图控制器”。其他所有视图都将作为子视图添加到其视图中。
    3. 在所有视图中,控制器设置 shouldAutorotateToInterfaceOrientation: 方法(当然,返回在plist中定义的相同值)
    4. 在所有视图控制器中,使用

      self.view.frame = CGRectMake(0, 0, 480, 320)

      viewDidLoad 方法。

    更新(iOS 4.x、5.x) :Apple iOS应用程序编程指南在“高级应用程序技巧”一章中有一段“以横向模式启动”。

    参考文献:

        4
  •  7
  •   samvermette    15 年前

    首先我在info.plist中设置

    <key>UIInterfaceOrientation</key>
    <string>UIInterfaceOrientationLandscapeRight</string>
    

    然后我将此代码放入ApplicationDidFinishLaunching:

    CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
    [window setTransform:rotate];
    
    CGRect contentRect = CGRectMake(0, 0, 480, 320); 
    window.bounds = contentRect; 
    [window setCenter:CGPointMake(160.0f, 240.0f)]; 
    

    这样我就可以在界面生成器中以横向模式处理视图。

        5
  •  6
  •   Community kfsone    7 年前

    sasb和michaelpryor的回答似乎是正确的,但是如果它对你不起作用,请尝试以下替代方法:

    - (void)applicationDidFinishLaunchingUIApplication *)application {
        application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
    }
    

    或者这个:

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
    

    或者这个:

    [application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
    

    你也可以打电话 window makeKeyAndVisible; 第一。

    几个环节: Developing in landscape mode , iPhone SDK: How to force Landscape mode only?

    @罗伯特:请参阅 The iPhone SDK, NDA, and Stack Overflow .

        6
  •  5
  •   Arlen Anderson    14 年前

    我很惊讶还没有人想出这个答案:

    在我的所有测试中,当一个解除模式视图控制器时,父视图控制器的首选方向设置为 shouldAutorotateToInterfaceOrientation 即使是作为uinavigationController的一部分,也会获得荣誉。所以解决这个问题的方法很简单:

    为背景创建带有uiImageView的虚拟uiViewController。将图像设置为应用程序启动时使用的默认.png图像。

    什么时候? viewWillAppear 在根视图控制器中调用,只显示不带动画的虚拟视图控制器。

    什么时候? viewDidAppear 在虚拟视图控制器中调用,用一个很好的交叉溶解动画消除视图控制器。

    这不仅有效,而且看起来不错!顺便说一句,为了澄清,我做了根视图控制器的 视图将出现 这样地:

    - (void)viewWillAppear:(BOOL)animated
    {
     if ( dummy != nil ) {
      [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
      [self presentModalViewController:dummy animated:NO];
      [dummy release];
      dummy = nil;
     }
    ...
    }
    
        7
  •  4
  •   Miguel A. Friginal    16 年前

    最新的《iPhone OS编程指南》对此有一个完整的章节,其中包含示例代码。我相信这是最近增加的,所以也许你错过了。它解释了你必须遵守的所有条件;基本上……

    • 设置info.plist属性(这会更改状态栏的位置,但不会更改视图)
    • 在uiviewController viewDidLoad:method或applicationDidFinishLaunching:method或implement auto-rotation(“自动调整大小行为”,第124页)上,围绕其中心手动旋转视图。

    寻找“以横向模式启动”,第102页。

        8
  •  3
  •   Community kfsone    7 年前

    请参阅此答案: Landscape Mode ONLY for iPhone or iPad

    1. 向plist添加方向
    2. shouldAutorotatePointerFaceOrientation=是,在所有文件中

    不过,如果你使用的是混合模式,你最好

    [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];