如何以正确的方向获得全屏界限?

时间:2013-04-13 16:50:23

标签: objective-c orientation bounds cgrect

人。 我有这样的问题:我需要全屏使用我的视图。所以我用

[_activityIndicator setFrame:[[UIScreen mainScreen] applicationFrame]];

这是完美的工作,但仅限于纵向视图。如果我的应用程序也必须在横向上工作该怎么办?

2 个答案:

答案 0 :(得分:2)

您的应用有一个根视图控制器,它会响应设备的旋转而旋转。因此,根据根视图控制器的视图设置框架。使用 bounds ,而不是它的框架。

您可以通过主窗口获取对根视图控制器的引用。您可以通过共享应用程序获取对主窗口的引用:

UIWindow* theWindow = [[UIApplication sharedApplication] keyWindow];
UIViewController* rvc = theWindow.rootViewController;
UIView* mainView = rvc.view;
UIActivityIndicatorView* act = 
    [[UIActivityIndicatorView alloc] initWithFrame: mainView.bounds];
[mainView addSubview: act];

然后保留对属性中活动指示器的引用并将其设置为旋转。

答案 1 :(得分:1)

要使用当前屏幕边界:

CGRect screenBoundsDependOnOrientation()
{
    CGRect screenBounds = [UIScreen mainScreen].bounds ;
    CGFloat width = CGRectGetWidth(screenBounds)  ;
    CGFloat height = CGRectGetHeight(screenBounds) ;
    UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;

    if(UIInterfaceOrientationIsPortrait(interfaceOrientation)){
        screenBounds.size = CGSizeMake(width, height);
    }else if(UIInterfaceOrientationIsLandscape(interfaceOrientation)){
        screenBounds.size = CGSizeMake(height, width);
    }
    return screenBounds ;
}