请注意,这个问题是从2008年开始的,现在只是具有历史意义。


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

以编程方式和使用Interface Builder。

===============>>#1 票数:46 已采纳

只有历史回答。 壮观地过时了。

请注意,这个答案现已大大过时/

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


令人兴奋的消息! 正如安德鲁在下面发现的那样,这个问题已由Apple在4.0+中修复。

似乎不再需要在每个视图上强制视图的大小,并且已经解决了“仅在第一次工作”的景观的特定严重问题。

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


这是最初的讨论和解决方案。 这完全不相关,因为这些系统甚至不可操作。


完全开展这项工作真是太困难了 - 至少有三个问题/错误在起作用。

试试这个.. 界面建设者景观设计

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

希望它有助于这场噩梦!

这里有一个重要的提醒:这里有一个众所周知的问题:如果你试图在多于一个视图(所有景观)之间进行交换,那么IT简单就行不通了 记住这一点至关重要,否则你会在这个问题上浪费时间。 这实际上是不可能的。 它是iOS平台上最大的已知漏洞。 实际上没有办法让硬件使你加载的第二个视图成为风景。 烦人但简单的解决方法,以及你必须做的,是有一个简单的主UIViewController除了坐在那里让你在你的视图之间交换什么都不做。

换句话说,在iOS中,因为一个主要的知识错误:

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

你只能这样做一次 稍后,如果您尝试删除happyThing.view,而是将newThing.view放入其中,那么它就不起作用了 - 就是这样。 机器永远不会将视图旋转到横向。 没有诀窍修复,即使苹果无法使其发挥作用。 你必须采用的解决方法是拥有一个整体的UIViewController,它只是坐在那里,只保存你的各种视图(happyThing,newThing等)。 希望能帮助到你!

===============>>#2 票数:40

来自Apple Dev网站:

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

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

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

===============>>#3 票数:27

所有帖子的总结和整合,经过自己测试后; 检查以下4.x,5.x的更新。

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

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

试试这个食谱:

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

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

    viewDidLoad方法中。

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

参考文献:

===============>>#4 票数:7

首先我在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中处理视图。

===============>>#5 票数:6

sasb和michaelpryor的回答似乎是正确的,但如果它不适合你,请尝试以下方法:

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

或者这一个:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

或者这一个:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

您可能还需要调用window makeKeyAndVisible; 第一。

一些链接: 在横向模式下开发iPhone SDK:如何仅强制横向模式?

@Robert:请参阅iPhone SDK,NDA和Stack Overflow

===============>>#6 票数:5

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

在我的所有测试中,当解除模态视图控制器时,即使在UINavigationController的一部分中,父视图控制器在shouldAutorotateToInterfaceOrientation设置的首选方向也被尊重。 所以这个解决方案很简单:

创建一个带有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;
 }
...
}

===============>>#7 票数:4

最新的iPhone OS编程指南有一个完整的部分,带有示例代码。 我相信这是最近添加的,所以也许你错过了它。 它解释了您必须遵守的所有条件; 基本上...

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

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

===============>>#8 票数:3

请参阅此答案: 仅适用于iPhone或iPad的横向模式

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

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

  ask by Michiel de Mare translate from so

未解决问题?本站智能推荐: