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

Translate

请注意,这个问题来自2008年,现在仅具有历史意义。


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

既可以通过编程方式也可以使用Interface Builder。

This question and all comments follow the "Attribution Required."

所有的回答

Translate

仅历史性答案。惊人地过时了。

请注意,此答案现在已经过时/

这个答案是只有历史的好奇心.


令人兴奋的消息!如以下Andrew所发现,此问题已由Apple在4.0+中修复。

似乎不再需要在每个视图上强加视图的大小,并且解决了“仅在第一次使用”时出现的严重景观问题。

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


这是原始的讨论和解决方案。现在这完全不相关,因为这些系统甚至无法运行。


完全无法完成这项工作非常困难-至少存在三个问题/错误。

尝试这个 ..界面生成器景观设计

特别要注意的是“并且您需要在各处正确使用shouldAutorotateToInterfaceOrientation”它意味着无处不在的所有全屏视图。

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

一个重要的提醒事项是这里即将出现的其他众所周知的问题:如果您要在超过一个查看(所有风景),简单地不起作用。记住这一点很重要,否则您将在问题上浪费很多时间。从字面上看这是不可能的。这是iOS平台上最大的已知漏洞。实际上,没有办法使硬件使您加载的第二个视图成为风景。烦人但简单的解决方法以及必须要做的就是拥有一个琐碎的主UIViewController,该UIViewController除了坐在那里之外什么都不做,让您在视图之间进行交换。

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

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

你只能做一次。以后,如果您尝试删除happyThing.view,而是将其放置在newThing.view中,则它不起作用-就是这样。机器将永远不会将视图旋转到风景。没有特技修复,即使Apple无法使它正常工作。您必须采用的解决方法是拥有一个整体的UIViewController,该UIViewController只是坐在那里并只保存您的各种视图(happyThing,newThing等)。希望能帮助到你!

来源
Translate

从Apple Dev网站:

要以横向模式启动应用程序,以便状态栏立即位于适当的位置,请编辑Info.plist文件以添加具有适当值(UIInterfaceOrientationLandscapeRight或UIInterfaceOrientationLandscapeLeft)的UIInterfaceOrientation键,如清单2所示。

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

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
来源
Translate

经过我自己测试之后,所有帖子的摘要和集成;检查以下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 App编程指南的“高级应用程序技巧”一章中有“在横向模式下启动”段落。

参考文献:

来源
Translate

首先我在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)]; 

这样,我可以在横向模式下的Interface Builder中处理视图。

来源
Translate

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

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

或者这个:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

或者这个:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

您可能还需要打电话window makeKeyAndVisible;第一。

一些链接:以横向模式进行开发, iPhone SDK:如何仅强制使用横向模式?

@罗伯特:请参考iPhone SDK,NDA和堆栈溢出.

来源
Translate

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

在我所有的测试中,当解散模态视图控制器时,父视图控制器的首选方向设置为shouldAutorotateToInterfaceOrientation即使当UINavigationController的一部分时也很荣幸。因此,解决方案很简单:

创建一个带有UIImageView的虚拟UIViewController作为背景。将图像设置为您的应用在启动时使用的default.png图像。

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

什么时候viewDidAppear在您的虚拟视图控制器中被调用,并使用漂亮的交叉分解动画关闭视图控制器。

不仅可以工作,而且看起来不错!顺便说一句,为澄清起见,我做根视图控制器的viewWillAppear像这样:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}
来源
Muriel Lee
Translate

最新的《 iPhone OS编程指南》对此进行了完整介绍,并提供了示例代码。我确信这是最近添加的,所以也许您错过了它。它说明了您必须遵守的所有条件;基本上...

  • 设置Info.plist属性(这会更改状态栏的位置,但不会更改视图)
  • 在UIViewController viewDidLoad:方法或applicationDidFinishLaunching:方法上绕其中心手动旋转视图,或实现自动旋转(“自动调整大小的行为”,第124页)

在第102页上查找“在横向模式下启动”。

来源
Translate

看到这个答案:仅适用于iPhone或iPad的横向模式

  1. 向plist添加方向
  2. 所有文件中的shouldAutorotateToInterfaceOrientation = YES

虽然如果您使用混合模式,则可能会更好

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
来源
上一个问题:
search -Lucene评分结果