Mic*_*are 96 landscape objective-c ios
注意:这个问题来自2008年,现在只具有历史意义.
无论设备的位置如何,创建从横向模式运行的iPhone应用程序的最佳方法是什么?
以编程方式和使用Interface Builder.
Fat*_*tie 47
请注意,这个答案现在已经过时了.
这篇文章只是一个历史的好奇心.
令人兴奋的消息!正如安德鲁在下面发现的那样,这个问题已由Apple在4.0+中修复.
似乎不再需要在每个视图上强制视图的大小,并且已经解决了"仅在第一次工作"的景观的特定严重问题.
截至2011年4月,不可能测试甚至构建低于4.0的任何东西,所以这个问题纯粹是一种历史性的好奇心.令人难以置信的是它给开发人员带来了多长时间的麻烦!
这是最初的讨论和解决方案.这完全不相关,因为这些系统甚至不可操作.
完全开展这项工作真是太困难了 - 至少有三个问题/错误在起作用.
试试这个.. 界面建设者景观设计
特别要注意的是,它说"你需要在任何地方正确使用shouldAutorotateToInterfaceOrientation",这意味着无处不在,所有的全屏视图.
希望它有助于这场噩梦!
这里有一个重要的提醒:这里有一个众所周知的问题:如果你试图在多于一个视图(所有景观)之间进行交换,那么IT SIMPLY就不起作用了.记住这一点至关重要,否则你会在这个问题上浪费时间.这实际上是不可能的.它是iOS平台上最大的已知漏洞.实际上没有办法让硬件使你加载的第二个视图成为风景.烦人但简单的解决方法,以及你必须做的,是有一个简单的主UIViewController除了坐在那里让你在你的视图之间交换什么都不做.
换句话说,在iOS中,因为一个主要的知识错误:
[window addSubview:happyThing.view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
你只能这样做一次.稍后,如果您尝试删除happyThing.view,而是将newThing.view放入其中,那么它就不起作用了 - 就是这样.机器永远不会将视图旋转到横向.没有诀窍修复,即使苹果无法使其发挥作用.你必须采用的解决方法是拥有一个整体的UIViewController,它只是坐在那里,只保存你的各种视图(happyThing,newThing等).希望能帮助到你!
Mic*_*yor 41
来自Apple Dev网站:
要以横向模式启动应用程序以使状态栏立即处于适当的位置,请编辑Info.plist文件以添加具有适当值的UIInterfaceOrientation键(UIInterfaceOrientationLandscapeRight或UIInterfaceOrientationLandscapeLeft),如清单2所示.
清单2:以横向模式启动应用程序
Run Code Online (Sandbox Code Playgroud)<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
IlD*_*Dan 28
所有帖子的总结和整合,经过自己测试后; 检查以下4.x,5.x的更新.
从3.2开始,您无法从代码更改正在运行的应用程序的方向.
但您可以使用固定方向启动应用程序,但这样做并不简单.
试试这个食谱:
UISupportedInterfaceOrientations在Info.plist文件中设置方向shouldAutorotateToInterfaceOrientation:方法(当然,返回你在plist中定义的相同值)在所有视图控制器中设置背景视图
self.view.frame = CGRectMake(0, 0, 480, 320)
在viewDidLoad方法中.
更新(iOS 4.x,5.x):Apple iOS应用程序编程指南在"高级应用程序技巧"一章中有一个"在横向模式下启动"段落.
参考文献:
首先我在info.plist中设置
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Run Code Online (Sandbox Code Playgroud)
然后我把这段代码放在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)];
Run Code Online (Sandbox Code Playgroud)
这样我就可以在横向模式下在Interface Builder中处理视图.
sasb和michaelpryor的回答似乎是正确的,但如果它不适合你,请尝试以下方法:
- (void)applicationDidFinishLaunchingUIApplication *)application {
application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}
Run Code Online (Sandbox Code Playgroud)
或者这一个:
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Run Code Online (Sandbox Code Playgroud)
或者这一个:
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
Run Code Online (Sandbox Code Playgroud)
您可能还必须先打电话window makeKeyAndVisible;.
一些链接:在横向模式下开发,iPhone SDK:如何仅强制横向模式?
@Robert:请参阅iPhone SDK,NDA和Stack Overflow.
我很惊讶没有人提出这个答案:
在我的所有测试中,当解雇模态视图控制器时,父视图控制器的首选方向设置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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
最新的《 iPhone OS编程指南》对此进行了完整介绍,并提供了示例代码。我确定这是最近添加的,所以也许您错过了它。它说明了您必须遵守的所有条件;基本上...
在第102页上查找“在横向模式下启动”。
| 归档时间: |
|
| 查看次数: |
66946 次 |
| 最近记录: |