0

我的应用程序有几个 uiViews 并设置为支持两个方向。因为我的 uiViews 框架只是 iPad 整个尺寸的一部分,所以我试图根据 iPad 的保持方式来使我的 uiviews 框架居中。它是在 view controller.m 文件中以这种方式完成的:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    UIInterfaceOrientation des=self.interfaceOrientation;

    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad
    {
        CGRect ScreenBounds  = [[UIScreen mainScreen] bounds];

        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portrait
        {

            ipStPosX=(ScreenBounds.size.width -360)/2;
            ipStPosY=100; 
            return YES;
        }
        else//ipad -landscape
        {
            ipStPosX=(ScreenBounds.size.height -360)/2;
            ipStPosY=100; 
            return YES;
        }
    }
    else//iphone
    {
        UIInterfaceOrientation des=self.interfaceOrientation;

        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait
        {
            return NO;
        }
        else //iphone -landscape
        {
            return YES;
        }
    }
}

启动应用程序并更改方向后,无论我如何握住设备,它都会转到纵向部分 UIInterfaceOrientationPortrait。

我看到一些旧帖子并不真正适合这个问题并且令人困惑或过时,所以这里的任何帮助都会很棒。

4

2 回答 2

1

shouldAutorotateToInterfaceOrientation:是为了简单地告诉 iOS 你支持特定的方向。既然你想要除了 iPhone 风景之外的所有东西,你应该返回

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) //iPad
        return YES;
    return UIInterfaceOrientationIsPortrait(orientation);
}

实际调整您显示的内容,您想要使用willRotateToInterfaceOrientation:duration:didRotateFromInterfaceOrientation:实际更改项目。在您的情况下,鉴于您只是根据您所处的方向调整一些 iVar,我认为您将使用后者。

- (void)didRotateToInterfaceOrientation:(UIInterfaceOrientation)fromOrientation
    UIInterfaceOrientation des = self.interfaceOrientation;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) //iPad
    {
        CGRect ScreenBounds  = [[UIScreen mainScreen] bounds];

        if (UIInterfaceOrientationIsPortrait(des))//ipad-portrait
        {
            ipStPosX=(ScreenBounds.size.width -360)/2;
            ipStPosY=100; 
        }
        else //ipad -landscape
        {
            ipStPosX=(ScreenBounds.size.height -360)/2;
            ipStPosY=100; 
        }
    }
}
于 2012-07-24T20:43:31.020 回答
0

我认为这里有两个问题:

  1. 启用轮换 - 这可以通过实施以下方法来完成。您应该在此方法中放置一个断点以确保它被调用并且您返回 YES。请注意,只有那些被推送到导航栏或标签栏或者是窗口一部分的视图才会调用此方法。对于已使用 addSubView 方法添加到其他视图的视图,不会调用此方法。

    • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)方向;
  2. 实现上述方法而不实现任何其他方法将旋转您的视图。如果没有,您需要调查我上面概述的要点。一旦您的视图开始旋转,您就需要使用自动调整大小的蒙版来实现您的计划。使用自动调整大小的蒙版应该可以轻松实现视图居中。如果使用 XIB,您可以在 xcode 中查看调整大小的行为。

于 2012-07-26T06:38:30.247 回答