使用storyboard设置GLKView的初始大小

时间:2012-05-26 20:49:53

标签: ios storyboard opengl-es-2.0 glkit

我正在尝试设置GLKView的初始大小(基本上,我希望它完全是屏幕的大小,尽管有tabbar)。 因为我正在使用故事板,所以GLKView是在GLKViewController init方法中自动创建的(不确定,它没有真正记录,但我认为是这样)。在GLKViewController中,我只有viewDidLoad方法,这里是:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    if (!self.context) {
        NSLog(@"Failed to create ES context");
    }

    GLKView *view = (GLKView *)self.view;
    view.context = self.context;
}

所以,如果我不使用故事板,我会写这样的东西:

EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
GLKView *view = [[GLKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
view.context = context;
view.delegate = self;

GLKViewController * viewController = [[GLKViewController alloc] initWithNibName:nil bundle:nil];
viewController.view = view;

但是在使用故事板时,我没有机会这样做:

GLKView *view = [[GLKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

我尝试更改现有视图的框架,创建一个新的GLKView,然后将其分配给viewController.view - 没有结果。

是否可以用不同的方法设置或更改GLKView的大小等?

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

首先,我们应该将故事板中GLKViewController的“Wants Full Screen”属性更改为true。这将允许在不调整GLKView大小的情况下有条件地隐藏状态栏,如下所示:

 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

第二,我们应该将tabbar子视图的框架更改为全屏框架。似乎这只是一种在标签栏下显示 内容的方法。此方法应放在TabViewController子类中。

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect tabbarFrame = CGRectZero;
    for (UIView *view in self.view.subviews)
    {
        if ([view isKindOfClass:[UITabBar class]])
        {
            tabbarFrame = view.frame;
            break;
        }
    }    

    for (UIView *view in self.view.subviews)
    {
        if (![view isKindOfClass:[UITabBar class]])
        {
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, 
                                    view.frame.size.width, view.frame.size.height + tabbarFrame.size.height);
        }
    }
}

同样,这将允许在需要时隐藏标签栏,只需这段代码:

for (UIView *view in self.view.subviews)
{
    if ([view isKindOfClass:[UITabBar class]])
    {
        [UIView animateWithDuration:0.4f
                         animations:^{
                            [view setAlpha:0.f];
                         }
                         completion:nil];
        break;
    }
}