我正在尝试设置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的大小等?
答案 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;
}
}