iOS应用程序的iPad定位 - 自新版本发布以来

时间:2013-02-15 20:44:39

标签: ios ipad

上次我运行了我制作的iOS应用程序,它必须已经用于部署目标5.0和相关的SDK(它有可能早在4.3)。部署现在是6.1。我的应用程序只运行景观,在景观中工作得很好。但是在我更新了我的iPad和iOS SDK并在大约一年内第一次运行这个应用程序后,似乎已经发生了变化。

按钮显示为iPad处于纵向模式。这是错误的,因为它应该是横向的(它曾经工作得很好)。

最新更新有哪些变化?

我在Xcode中支持的界面方向仅选择了“横向右侧”,在“信息”部分中,我只有一个项目“支持的界面方向”:“横向(右侧主页按钮)”。

在应用程序首次打开时打开的主视图控件中,我有

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
            interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

以及viewDidLoad的第一行是

self.view.frame = CGRectMake(0, 0, 1024, 768);

那么为什么代码绘制按钮好像处于纵向模式?


更新

我尝试用

替换shouldAutorotateToInterfaceOrientation方法
- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationLandscapeRight & UIInterfaceOrientationLandscapeLeft;
}

但它仍然不起作用。

2 个答案:

答案 0 :(得分:0)

在iOS 6中不推荐使用

shouldAutorotateToInterfaceOrientation,您应该覆盖 supportedInterfaceOrientations

UIViewController方法

引用了doc:

  

在iOS 6中,您的应用支持在您的应用中定义的界面方向   app的Info.plist文件。视图控制器可以覆盖   supportedInterfaceOrientations方法限制支持的列表   取向。通常,系统仅在根上调用此方法   视图控制器的窗口或视图控制器呈现填充   整个屏幕;子视图控制器使用的部分   由父视图控制器为它们提供的窗口不再   直接参与有关轮换的决定   支持的。应用程序的方向掩码和视图的交集   控制器的方向掩码用于确定哪些方向   视图控制器可以旋转到。

     

您可以覆盖preferredInterfaceOrientationForPresentation   一个视图控制器,旨在全屏显示   具体方向。

答案 1 :(得分:0)

iOS6.0中的方向更改

您应该实施以下方法

-(BOOL)shouldAutorotate
{
  return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
   return UIInterfaceOrientationMaskLandscape;
}

// Set the initial preferred orientation
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
   return   UIInterfaceOrientationLandscapeRight;
}

注意
如果您正在使用TabBarController/NavigationController,则应该对这些视图控制器进行子类化以覆盖方向方法,以便它应该调用您自己的视图控制器方法。这是iOS6的重大变化。

 #import "UINavigationController+Orientation.h"

@implementation UINavigationController (Orientation)

-(NSUInteger)supportedInterfaceOrientations
{
   return [self.topViewController supportedInterfaceOrientations];
}

-(BOOL)shouldAutorotate
 {
   return YES;
 }

 @end