[英]Set an initial size of GLKView with storyboard
我正在嘗試設置GLKView的初始大小(基本上,盡管存在選項卡欄,但我希望它的大小恰好是屏幕的大小)。 因為我使用的是故事板,所以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的大小等?
找到了解決方案。
首先,我們應該將情節提要中的GLKViewController的“ Wants Full Screen”屬性更改為true。 這將允許有條件地隱藏狀態欄,而無需調整GLKView的大小,如下所示:
[[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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.