Ios 使用故事板设置GLKView的初始大小
我正在尝试设置GLKView的初始大小(基本上,我希望它与屏幕大小完全相同,尽管存在tabbar)。 因为我使用的是故事板,所以GLKView是在GLKViewController init方法中自动创建的(不确定,它并没有真正的文档化,但我认为是这样)。在GLKViewController中,我只有viewDidLoad方法,如下所示: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
- (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;
}
}