簡體   English   中英

使用情節提要設置GLKView的初始大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM