当你为iPhone开发程序的时候,你可能会用到XCode提供的项目模板。这些模板里有一个叫做Tab Bar Application的,可以帮助你快速创建一个基于Tab Bar的程序,但是默认生成的模板仅仅支持竖屏显示。那么如何才能做一个这样的程序,既支持横屏也支持竖屏呢?本文我们会探讨这个问题。

 

 

作者Matt Long

原文地址 http://www.cimgf.com/2008/11/13/landscape-tab-bar-application-for-the-iphone/

 

 

首先在XCode中创建一个新的Tab Bar程序。

 

1 按Command+Shift+N,在iPhone OS中选择Tab Bar Application,点击Choose…

2 为项目写一个名字,比如Tab Test

3 点击Save按钮。

 

你首先会注意到的是模板生成了两个类,一个叫做FirstViewController,用来控制第一个view。另一个叫做Tab_TestAppDelegate,作为程序的主控制器。

 

看一看FirstViewController中剩下的代码,大部分都被注释掉了,但是你会注意到有一个方法可以支持横屏。我们特别关心的是 -shouldAutorotateToInterfaceOrientation。 去掉这段注释,返回YES。这个设置会让controller支持所有的方向。

  1. // Override to allow orientations other than the default portrait orientation.
  2. - ( BOOL )shouldAutorotateToInterfaceOrientation : (UIInterfaceOrientation )interfaceOrientation {
  3.     // Return YES for supported orientations
  4.     return YES;
  5. }

 


 

这样做,当iPhone翻转时,会让我们的View也发生改变。用模拟器编译运行程序,当模拟器打开程序,选择菜单中的Hardware -> Rotate Left。你会发现当设备旋转时,View并没有跟着旋转。这是为什么呢?

 

全部或是没有

 

记住默认的tab bar程序模板建立了一个支持两个view的tab bar组建。当我们特别告诉FirstViewController对象支持横屏时,我们并没有告诉第二个view也同时支持横评。Tab bar工作的方式是如果任意一个view controller对于方向感应做出限制时,所有的View都会相应做出同样的限制。

 

这就意味着所有的controller必须一样调用-shouldAutorotateToInterfaceOrientation方法,返回YES来告诉系统打开横屏支持。在我们默认的Tab Bar程序里,我们并没有将第二个View制定到Controller里,因为我们并没有定义第二个controller。那么第二个controller在哪儿呢?答案是在Interface Builder中。你可以在XCode里双击MainWindow.xib,将Interface Builder打开。点击第一个View的tab,在Inspector中选择Identity tab,你就会发现是怎么回事了。

 

 

注意我们使用的是UIViewController类,这是我们view的controller,它紧紧提供了基本功能:这意味着它并没有完全提供controller的所有功能。屏幕旋转的默认设置仅仅支持竖屏。换句话讲,只有派生的类才支持通过-shouldAutorotateToInterfaceOrientation方法来打开横屏支持。

 

如果你希望你的程序支持横屏,你所有的tab view必须有自己的view controller,然后调用-shouldAutorotateToInterfaceOrientation,并返回YES来支持横屏。

 

结论

 

iPhone是很有趣的平台,非常强大,但是和你所熟悉的Mac OSX系统还是有些细微的差别。技巧是要记住你学过的Cocoa、MVC的基本概念,你就能够解决遇到的问题。