Ios 使用故事板设置GLKView的初始大小

Ios 使用故事板设置GLKView的初始大小,ios,storyboard,opengl-es-2.0,glkit,Ios,Storyboard,Opengl Es 2.0,Glkit,我正在尝试设置GLKView的初始大小(基本上,我希望它与屏幕大小完全相同,尽管存在tabbar)。 因为我使用的是故事板,所以GLKView是在GLKViewController init方法中自动创建的(不确定,它并没有真正的文档化,但我认为是这样)。在GLKViewController中,我只有viewDidLoad方法,如下所示: - (void)viewDidLoad { [super viewDidLoad]; self.context = [[EAGLContext

我正在尝试设置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;
 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
但在使用故事板时,我没有机会这样做:

GLKView *view = [[GLKView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
我尝试更改现有视图的框架,创建一个新的GLKView,然后将其分配给viewController.view-但没有结果

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

找到了解决方案

首先,我们应该将序列图像板中GLKViewController的“想要全屏”属性更改为true。这将允许有条件地隐藏状态栏,而无需调整GLKView的大小,如下所示:

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;
 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
第二,我们应该将选项卡栏的子视图的框架更改为全屏框架。这似乎只是在选项卡栏下显示内容的一种工作方法。此方法应放置在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;
    }
}