根据方向获取iPad视图的中心

时间:2011-05-28 06:52:58

标签: objective-c ipad uisplitviewcontroller

截至目前,我有以下代码:

float xCenter;
    float yCenter;
    if (self.splitViewController.interfaceOrientation == UIInterfaceOrientationPortrait || self.splitViewController.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
        xCenter = 384;
        yCenter = 512;
    } else if (self.splitViewController.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.splitViewController.interfaceOrientation == UIInterfaceOrientationLandscapeRight){
        xCenter = 512;
        yCenter = 384;
    }


uinc.view.superview.center = CGPointMake(xCenter, yCenter);

有更好的方法来简化这个吗?我想要做的就是在屏幕的中央显示它。我尝试将它分配给`self.splitViewController.view.center,但它没有给我我想要的中心。

uinc是UIModalPresentationSheet中提供的UINavigationController,但我想更改它的大小,因此必须设置位置。

1 个答案:

答案 0 :(得分:4)

您可以先使用UIInterfaceOrientationIs*方法开始。

以下是一种可以重写该代码段的方法:

CGPoint centerPoint = (UIInterfaceOrientationIsPortrait(self.splitViewController.interfaceOrientation) ?
                       CGPointMake(384, 512) : CGPointMake(512, 384));

您可以通过bounds的{​​{1}}或applicationFrame方法(不考虑方向)检索中心点,而不是硬编码中心点。


另一个解决方案是使用UISplitViewController视图的中心:

[UIWindow mainWindow]

如果您尝试创建加载指示符或其他一些应显示在屏幕上其他内容之上的元素,则应考虑将其直接添加到应用程序的UIWindow中。在这种情况下,您需要检测界面方向并相应地旋转视图。

UIViewController *splitViewController = [[[UIApplication sharedApplication] delegate] splitViewController];
CGRect bounds = [splitViewController.view bounds];
CGPoint centerPoint = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds));

我建议查看使用此方法的MBProgressHUD的来源(作为可配置选项)。